首页 > 解决方案 > Date.UTC() 未返回预期结果

问题描述

我正在尝试从一组值创建一个 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)"


有人可以解释这里发生了什么吗?


更新:

我应该澄清一下,我使用的是 MDN 声明的 API。问题是 Safari 没有最新的实现。这在另一个 SO 用户的帮助下得到了验证,幸运的是,他更新了文档。

第二个示例来自.toISOString()零索引的误解,而它产生的时区偏移量为 0 的值,而不是月份是零索引的。

标签: javascriptarraysdate

解决方案


示例 #1

您引用的行表明在 ES5 环境中需要年和月。如果您需要支持较旧的执行环境,您不能只过年。

但是,正如 TJ Crowder 在评论中指出的那样,此代码似乎有效。你用什么浏览器试试?

示例 #2

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

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

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


推荐阅读