【问题标题】:Javascript timezone offset, date timeJavascript时区偏移,日期时间
【发布时间】:2019-12-04 18:27:05
【问题描述】:

我不太确定是否有某种解释或其他东西,但我对 javascript 中的时区偏移有疑问。

我的时区是 +1(德国)

> new Date()
2019-12-04T17:58:30.626Z

我在我的终端中的节点实例中运行了该代码。我在某种程度上理解,但我当时的实际时间是 18:58:30。

但是,将新日期的时间设置为午夜时。我清楚地得到了午夜的时间戳。

> new Date().setHours(0, 0, 0, 0)
1575414000000

但是,当我使用它创建一个新的时间戳而不是输出时,时间是前一天的晚上 11 点。

> new Date(new Date().setHours(0, 0, 0, 0))
2019-12-03T23:00:00.000Z

有人可以解释为什么会发生这种情况以及发生这种情况的原因是什么?

【问题讨论】:

  • 您正在为当地时间设置时间。像这样检查 var date = new Date(); date.toTimestring() 并查看 GMT+1:00 的午夜

标签: javascript datetime time


【解决方案1】:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setHours

setHours() 方法设置指定日期的小时数根据当地时间,并返回自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数> 直到更新的 Date 实例所代表的时间。

请注意,该方法的输入被解释为本地时间,但该方法的输出是 UTC。所以当你运行时

new Date(new Date().setHours(0, 0, 0, 0))

您确实得到了一个表示当地时间午夜的日期对象,在您的情况下,这相当于(在您的情况下)UTC 时间前一天晚上 11 点(字符串末尾的 Z 表示它是 UTC 时间,或者“祖鲁”时代。

两个选项可能更符合您的预期:

  1. 使用setUTCHours() 将生成代表UTC 午夜时间的日期对象。
  2. 将其转换为您当地时区的字符串,例如

    new Date(new Date().setHours(0, 0, 0, 0)).toLocaleString()

【讨论】:

  • 感谢您的回答 #2。但是你能解释一下为什么.setHours() 使用本地时区偏移量吗?
  • 这就是它的作用。我更正了 MDN 上 setHours() 文档的链接。 setHours() 使用本地时间,setUTCHours() 使用 UTC 时间。
猜你喜欢
  • 2021-12-19
  • 1970-01-01
  • 2017-11-22
  • 2011-05-18
  • 2018-03-15
  • 1970-01-01
  • 2016-01-02
  • 2017-03-31
  • 1970-01-01
相关资源
最近更新 更多