【发布时间】:2019-02-04 20:57:30
【问题描述】:
我最近一直在与 Dates 合作一个项目,并注意到一些我认为没有意义的奇怪事情(或者,至少对我来说没有意义)。
在javascript中,你可以创建一个新的日期,默认情况下,如果你得到月份,它会返回当前月份的数字减一。
let dt = new Date();//Assume 30/8/2018
dt.getMonth();// returns 7
您还可以使用现有日期创建一个从 UTC 运行的新日期,并且由于 javascript 的日期的 .getMonth() 方法总是返回月份数减一,因此您加一以获得正确的月份...但是,Date.UTC(...) 返回下个月,而不是当前/正确的月份
(假设下面sn-p中的dt与上面sn-p中的当前时间相同)
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.UTC() 与 Date() 相比返回完全不同的月份值?
我知道 UTC 和浏览器时间通常不一样,但肯定不会在一个月之内结束吗?
【问题讨论】:
-
因为你有
dt.getMonth()+1,所以月份是从零开始的 -
“你加一个以获得正确的月份”如果你得到一个0-11个月,是什么让你认为构造函数需要一个1 -12?
-
dt.getMonth() 返回一个从零开始的数字(对于八月,它返回 7),因此您将结果加一以显示正确的月份(即 8)。但是,utc_dt.getMonth() 似乎在做一些不同的事情,因为它不是从零开始的
标签: javascript node.js date