Javascript 当我试图在一个月的第一天使用夏令时,我该如何处理?
如果我尝试从11月开始提取第一天的数字,这很好: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
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,并且它们不是每年固定的日期。这种方法的问题是,这对英国来说非常具体。我希望能够拉任何一个月的第一天,无论用户在世界上的位置。