【问题标题】:Javascript convert string to date, but ignore the timezone that is assumed it's inJavascript将字符串转换为日期,但忽略假定它所在的时区
【发布时间】:2017-05-18 12:07:46
【问题描述】:

一个很长的标题,我知道,但我必须强调一个事实,即我所面临的情况与所有通常的 javascript 日期转换有点不同。

我正在从服务器的字符串中获取以下日期时间:

2017-05-18T08:00:00

当我将此字符串放入以下语句时:

var newDate = new Date("2017-05-18T08:00:00");

它假定它在 UTC 时区,因此它会自动调整并将其转换为本地时间,在悉尼将变为 2017/05/18 18:00:00

有什么方法可以阻止日期构造函数假设字符串是 UTC 时间(让它假设它是本地时间)?

【问题讨论】:

  • 你能把 -10:00 加到末尾吗?
  • 这个问题在hereherehere 等很多地方都有涉及
  • 您是否有机会修复服务器,以便为您提供带时区的 ISO 8601 字符串?期望消费者知道服务器的位置是一种反模式。
  • "2017-05-18T08:00:00" 应该被解析为本地,而不是 UTC,所以有一个例子说明为什么你不应该使用内置解析器。见Why does Date.parse give incorrect results?

标签: javascript date datetime


【解决方案1】:

使用getTimezoneOffset() 函数调整时区。默认情况下 Date 将其转换为本地时区 :(

【讨论】:

  • 谢谢。像这样使用它: new Date(new Date(timestampStr).getTime() + (new Date().getTimezoneOffset() * 60 * 1000))
  • 这是个坏主意。 OP 行为不符合标准,因此通过时区偏移量进行调整将意味着结果在符合标准的主机中是错误的(很多)。
【解决方案2】:

如果您将代码应用到严肃的应用程序中,请考虑使用像 Moment.js 这样的工具

【讨论】:

  • 谢谢!这有帮助!
  • 这应该是评论,不是答案。
猜你喜欢
  • 2017-07-29
  • 2018-10-28
  • 2018-12-17
  • 1970-01-01
  • 2019-10-21
  • 2017-11-22
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
相关资源
最近更新 更多