Date.UTC()未返回预期结果

时间:2019-01-13 15:02:42

标签: javascript arrays date

我正在尝试从值数组创建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,而不是月份的索引为零。

1 个答案:

答案 0 :(得分:3)

示例1

您引用的行表示在ES5-环境中,年份和月份都是必需的。如果您需要支持较旧的执行环境,就不能只经历一年。

但是,作为T.J. Crowder在注释中指出,此代码似乎有效。您正在尝试使用哪种浏览器?

示例#2

JavaScript日期中的月份为0索引。这意味着1(或01)月份是2月。

因此Date.UTC(2019, 01)生成了UTC 2019年2月1日午夜的时间戳,该时间戳对应于CST 2019年1月31日下午6点。

另一件事::您应该避免在JavaScript数字文字前加上0,因为这是表示八进制的语法。这意味着020 === 16