我最近一直在与Dates合作开发一个项目,并且发现了一些我认为不合理的东西(或者,至少对我来说这没有意义)。
在javascript中,您可以创建一个新日期,默认情况下,如果您获得月份,它将返回当前月份号减一。
let dt = new Date();//Assume 30/8/2018
dt.getMonth();// returns 7
您还可以使用现有日期创建一个新日期以从UTC运行,并且由于javascript的 .getMonth() Dates方法始终返回月份号减一,因此您可以添加一个来获取正确的月份...但是, Date.UTC(...)返回下个月而不是当前/正确的月份
(假设以下代码段中的 dt 与当前时间段中的上述代码段相同)
let utc_dt = new Date(//Assume 30/8/2018
Date.UTC(
dt.getFullYear(),
dt.getMonth()+1,
dt.getDate(),
dt.getHours(),
dt.getMinutes(),
dt.getSeconds()
)
);
utc_dt.getMonth();// returns 9
为什么与 Date()相比,使用 Date.UTC()返回的月份值完全不同?
我了解UTC和浏览器的时间通常并不相同,但是肯定不会在一个月之内消失吗?
答案 0 :(得分:1)
除+1之外,dt.getMonth()
还根据系统设置返回本地月份,而Date.UTC会将第二个参数解释为 UTC月份 >。
UTC月在当地时区的时间段有所不同,该时间在该月的最后一天/第一天的午夜两边。因此,如果今天是当地时间8月31日,那么您加1,就要求9月31日到10月1日。
同样,时区偏移意味着这种影响会在时区偏移的时间内扩展,因此似乎发生在不合逻辑的时间。
答案 1 :(得分:0)
取自this page:
使用的参数:
[…]
- month:指定整数 在0到11之间代表月份。
[…]
这意味着,您只需传递一个介于0到11之间的值,其中0表示一月,11表示十二月:
let dt = new Date(); //Assume 30/8/2018
console.info(dt.getMonth()); // returns 7
let utc_dt = new Date( //Assume 30/8/2018
Date.UTC(
dt.getFullYear(),
dt.getMonth(),
dt.getDate(),
dt.getHours(),
dt.getMinutes(),
dt.getSeconds()
)
);
console.info(utc_dt.getMonth()); // returns 7