在尝试拉取一个月的第一天时,如何处理夏令时
How can I handle daylight savings time when trying to pull the first day of a month?
如果我尝试从 11 月提取第一天的数字,这工作正常:
var d = new Date(2013, 10, 1); // 1st of November 2013
d.toISOString(); // 2013-11-01T00:00:00.000Z (November)
d.getDay(); // 5 (Correct, 1st of November = Friday = 5)
但是,由于英国的夏令时(时钟在 10 月底向前移动一小时(,如果我尝试拉出 10 月的第一天,日期最终会设置为前一天的 23:00:
var d = new Date(2013, 9, 1); // 1st of October 2013
d.toISOString(); // 2013-09-30T23:00:00.000Z (September)
d.getDay(); // 2 (Last day number of September)
我如何处理这个问题,以便我总是在每月的 1 号获得 00:00:00,无论夏令时如何(以及用户在世界任何地方的任何其他时钟调整(?
您正在寻找getDay
方法,而不是getDate
。这两种方法始终适用于本地时间,无论时区和 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
使用 new Date(Date.UTC(year, month, day [, hour, minute, second, millisecond]))
从特定的 UTC 时间创建 Date 对象。
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)'
在这种情况下,请尝试将其设置为 10 月 1 日凌晨 1 点或其他内容:(取决于您
的时间(===== 编辑 1 ======
JavaScript .setDate(1( 函数的行为是否正常?很抱歉,我认为我无法在我的时区测试您的情况
相关文章:
- JavaScript - 检查时区的夏令时
- 夏令时期间不起作用的 2 个日期之间的小时差异
- 如何在Dynamics CRM中获取时区的夏令时开始和结束时间
- Office 365 REST API:适用于夏令时
- FullCalendar夏令时将事件向后移动1天
- 使用javascript,将日期字符串与夏令时进行比较
- 它有一个库或Web服务,可以为我的javascript应用程序提供夏令时数据
- 如何使用 Javascript 确定夏令时是否对给定日期和时区有效
- 没有夏令时的日期
- 检查不同时区的夏令时是否有效
- 世界时、夏令时和 JavaScript
- 在尝试拉取一个月的第一天时,如何处理夏令时
- 使用时刻.js或时刻时区,匹配标准时间和夏令时
- 如何处理夏令时时区偏移量
- 时区转换器,包括夏令时
- JavaScript、时区和夏令时
- 设置UTC日期似乎是在使用夏令时
- 如何在JavaScript中处理夏令时和时区
- 经过计算,日期似乎正在将时区从夏令时更改为标准时区
- 确定未来日期的夏令时