【发布时间】:2020-08-14 08:31:32
【问题描述】:
我住在英国。如果我为 6 月 1 日创建一个日期对象,我会期望 .getUTCDate() 将月份中的“正确”日期返回为 1,但它会返回 31 和 .getDate(),我认为这是为了返回语言环境日期返回1。
new Date(2020,5,1).getUTCDate() // 31
new Date(2020,5,1).getDate(); // 1
这是为什么?是因为new Date(2020,5,1) 已经转换为当地时间还是什么?我认为日期是通用存储的,只有在打印出日期时才应用语言环境规则?我已经阅读了所有的 MDN 文档,但仍然不明白,如果有人可以按照上述步骤返回 31 和 1,我将不胜感激。
【问题讨论】:
-
您回答了自己的问题。默认情况下,除非您指定 UTC,否则日期由您的本地计算机决定。看这里google.com/…
-
@full-stack 但是如果“日期对象的内部表示是单个数字,表示自 1970-01-01 00:00:00 UTC 以来经过的毫秒数”,当然
new Date(2020,5,1)应该是 2020 年 6 月 1 日 UTC,new Date(2020,5,1).getUTCDate()应该是 1。我不明白 BST 在什么时候进入组合并导致它改为 31。 -
见这里:“当使用Date对象的各种功能时,计算机的本地时区应用于内部表示”stackoverflow.com/questions/15141762/…。
-
似乎
new Date(2020,5,1)将按预期将日期存储为UTC,但是当您调用.getUTCDate()或.getDate()时,日期将被视为实际存储为本地时间并且是首先从本地时间(在 BST 中提前 1 小时)转换回 UTC(所以返回 1 小时),然后.getUTCDate将返回此日期,.getDate将转换为“返回本地”,因此添加一个第一个小时,按预期将我们带回到最初的 2020 年 6 月 1 日。这是正确的吗?
标签: javascript date