【问题标题】:JS Date() returns correct timezone but wrong dateJS Date() 返回正确的时区但错误的日期
【发布时间】:2013-11-10 14:44:29
【问题描述】:

尝试在 javascript 中使用 Date() 获取当前日期时,我遇到了奇怪的行为。 首先,我将时区设置为古巴

sudo ln -sf /usr/share/zoneinfo/Cuba /etc/localtime

并在另一个运行 node.js 的控制台中运行 Date()。这是输出 -

> Date()
'Thu Oct 31 2013 06:28:25 GMT+1100 (CDT)'

在更改时区时,

sudo ln -sf /usr/share/zoneinfo/Asia/Vladivostok /etc/localtime

再次运行Date(),这是输出 -

> Date()
'Thu Oct 31 2013 06:28:31 GMT+1100 (VLAT)'

谁能解释为什么会发生这种情况以及如何根据时区获取时间?

【问题讨论】:

  • 在进行此更改后在 shell 中运行 date 时会说什么? (我的意思是 /usr/bin/date,不是 node.js shell)
  • 检查这个链接,这里有帮助SO - Question
  • @ithcy,这就是它所说的 - [parin@arch ~]$ date Thu Oct 31 06:39:59 VLAT 2013 [parin@arch ~]$ date Wed Oct 30 15:40:06 CDT 2013
  • 更改时区后退出node.js重新进入了吗?你试过new Date() 而不是Date()
  • 另外,我相信古巴的正确 tz 是 America/Havana

标签: javascript node.js date timezone


【解决方案1】:

操作系统时区和node 的一些混乱表明,虽然node 在运行时正确获取时区 更改,但它无法更新偏移量 .这就是为什么两个日期都显示GMT+1100

如果你重启node,你会发现偏移量和时区都是正确的。我怀疑这是为了避免在运行期间意外更改时间,但在 Google 搜索中找不到任何与此相关的内容。

【讨论】:

  • 是的,在重启节点时,它会显示正确的日期。但是,我想在 JS 脚本中显示时区更改的日期更改。我只是使用node shell 来检查这个。有没有办法计算时区的偏移量?
  • @ParinPorecha 您希望时区在脚本运行期间发生变化?
  • 是的。我想我应该更好地解释它 - 该脚本是一个 gnome-shell 扩展,它显示一个时钟。因此,如果用户更改时间/时区,我希望时钟立即更新,而无需重新启动 gnome-shell 或计算机。
  • 大多数 JavaScript 运行时在重新启动之前不会获取时区更改。有趣的是,Node 完全接受了名称的更改。我所知道的唯一不需要重启的环境是 Microsoft Internet Explorer。所有其他浏览器和解释器都需要在时区更改后重新启动。
猜你喜欢
  • 2011-02-06
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多