我正在尝试从值数组创建UTC日期。文档指出,如果省略任何参数,则应默认为0或1。
语法:
Date.UTC(year, month[, day[, hour[, minute[, second[, millisecond]]]]])
示例:
var tp = [2019]
var d = new Date(Date.UTC.apply(null, tp))
console.log(d.toString())
结果: "Invalid Date"
示例2:
var tp = [2019, 01]
结果:"Thu Jan 31 2019 18:00:00 GMT-0600 (CST)"
预期: "Thu Jan 1 2019 00:00:00 GMT-0600 (CST)"
有人可以解释这里发生了什么吗?
更新:
我应该澄清一下,我使用的API是MDN。问题是Safari没有最新的实现。另一个SO用户的帮助对此进行了验证,他幸运地更新了文档。
第二个示例来自一个误解,即.toISOString()
的索引为零,而它产生的时区偏移量为0,而不是月份的索引为零。
答案 0 :(得分:3)
您引用的行表示在ES5-环境中,年份和月份都是必需的。如果您需要支持较旧的执行环境,就不能只经历一年。
但是,作为T.J. Crowder在注释中指出,此代码似乎有效。您正在尝试使用哪种浏览器?
JavaScript日期中的月份为0索引。这意味着1
(或01
)月份是2月。
因此Date.UTC(2019, 01)
生成了UTC 2019年2月1日午夜的时间戳,该时间戳对应于CST 2019年1月31日下午6点。
另一件事::您应该避免在JavaScript数字文字前加上0
,因为这是表示八进制的语法。这意味着020 === 16
。