Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当我试图在一个月的第一天使用夏令时,我该如何处理?_Javascript - Fatal编程技术网

Javascript 当我试图在一个月的第一天使用夏令时,我该如何处理?

Javascript 当我试图在一个月的第一天使用夏令时,我该如何处理?,javascript,Javascript,如果我尝试从11月开始提取第一天的数字,这很好: var d=新日期(2013年10月1日);//2013年11月1日 d、 toISOString();//2013-11-01T00:00:00.000Z(11月) d、 getDay();//5(正确,11月1日=星期五=5) 但是,由于英国的夏时制(时钟在10月底向前拨一小时),如果我尝试将10月的第一天拨出,则日期最终会设置为前一天的23:00: var d=新日期(2013年9月1日);//2013年10月1日 d、 toISOStr

如果我尝试从11月开始提取第一天的数字,这很好:

var d=新日期(2013年10月1日);//2013年11月1日
d、 toISOString();//2013-11-01T00:00:00.000Z(11月)
d、 getDay();//5(正确,11月1日=星期五=5)
但是,由于英国的夏时制(时钟在10月底向前拨一小时),如果我尝试将10月的第一天拨出,则日期最终会设置为前一天的23:00:

var d=新日期(2013年9月1日);//2013年10月1日
d、 toISOString();//2013-09-30T23:00:00.000Z(九月)
d、 getDay();//2(9月的最后一天)

我如何处理这个问题,使我总是在月1日的00:00:00,而不考虑夏令时(以及用户可能在世界上任何地方进行的任何其他时钟调整)?

在这种情况下,请尝试将其设置为10月1日凌晨1点或其他时间:(取决于您切换时间的多少)

====编辑1======

setDate(1)函数是否正常运行?
很抱歉,我无法在我的时区测试您的案例,我想在这种情况下,请尝试将其设置为10月1日凌晨1点或其他时间:(取决于您切换的时间)

====编辑1======

setDate(1)函数是否正常运行? 很抱歉,我无法在我的时区测试您的案例,我想您正在寻找的是,而不是。无论时区和DST如何,这两种方法都始终适用于本地时间

但是,
.toISOString
没有。它以UTC格式设置时间,并导致您的困惑。改为使用
.toString
功能,该功能还输出本地时间

> new Date(2013, 9, 1).toISOString()
"2013-09-30T22:00:00.000Z" // my timezone's midnight in UTC
> new Date(2013, 9, 1).toString()
"Tue Oct 01 2013 00:00:00 GMT+0200" // midnight, with offset
> new Date(2013, 9, 1).getDate()
1 // the *first* day of October
> new Date(2013, 9, 1).getDay()
2 // is a Tuesday
你要找的是那个,不是那个。无论时区和DST如何,这两种方法都始终适用于本地时间

但是,
.toISOString
没有。它以UTC格式设置时间,并导致您的困惑。改为使用
.toString
功能,该功能还输出本地时间

> new Date(2013, 9, 1).toISOString()
"2013-09-30T22:00:00.000Z" // my timezone's midnight in UTC
> new Date(2013, 9, 1).toString()
"Tue Oct 01 2013 00:00:00 GMT+0200" // midnight, with offset
> new Date(2013, 9, 1).getDate()
1 // the *first* day of October
> new Date(2013, 9, 1).getDay()
2 // is a Tuesday
使用
新建日期(Date.UTC(年、月、日[、小时、分钟、秒、毫秒])
从特定UTC时间创建日期对象

var d = new Date(Date.UTC(2013, 9, 1));
d.toISOstring(); //'2013-10-01T00:00:00.000Z'
d.toString(); //'Fri Nov 01 2013 02:00:00 GMT+0200 (EET)'
使用
新建日期(Date.UTC(年、月、日[、小时、分钟、秒、毫秒])
从特定UTC时间创建日期对象

var d = new Date(Date.UTC(2013, 9, 1));
d.toISOstring(); //'2013-10-01T00:00:00.000Z'
d.toString(); //'Fri Nov 01 2013 02:00:00 GMT+0200 (EET)'

对于d.getDate();在第二个例子中,我自己尝试的时候得到了1,我也得到了d.toISOString()的10月1日。在英国,这似乎是夏令时的问题。我已经修改了我的问题(有点重要)。问题似乎是
toISOString()
返回UTC时间,因此您将在世界各地得到不一致的结果。对于d.getDate(),您将
getDate
getDay
混淆;在第二个例子中,我自己尝试的时候得到了1,我也得到了d.toISOString()的10月1日。在英国,这似乎是夏令时的问题。我已经修改了我的问题(有点重要)。问题似乎是
toISOString()
返回UTC时间,因此您将在世界各地得到不一致的结果。你把
getDate
getDay
搞混了?我认为这对解决问题没有什么帮助,因为你必须检查代码,看它是否是BST,而且它们不是每年固定的日期。这种方法的问题是,这对英国来说非常特殊。我希望能够在任何一个月的第一天拉取,无论用户位于世界何处。我不认为这真的有助于解决问题,因为你必须检查代码以确定它是否为BST,并且它们不是每年固定的日期。这种方法的问题是,这对英国来说非常具体。我希望能够拉任何一个月的第一天,无论用户在世界上的位置。