【问题标题】:convert local timezone timestamp to UTC timestamp将本地时区时间戳转换为 UTC 时间戳
【发布时间】:2019-03-09 21:55:14
【问题描述】:

我的服务器将日期数据作为本地时区时间戳返回。

在客户端,我想将这些日期显示为本地日期字符串。如果我执行以下操作,我得到了错误的日期(“6/30/2014”而不是“7/01/2014”)

var ts = 1404172800;
new Date(1404172800*1000).toLocaleDateString()
>>>"6/30/2014" 

为了防止这个问题,我想我必须在创建 new Date() 对象之前将从服务器接收到的本地时区时间戳转换为 UTC 时间戳。

我说的对吗?在大多数浏览器中实现这一目标的最佳方法是什么?

编辑

我确认本地时区的实际日期应该是 2014 年 7 月 1 日。那是当地东部时间 UTC -5(-4)。但new Date() 对象认为这是 UTC 但事实并非如此。我想这是因为日期作为时间戳返回而没有转换为 UTC。

【问题讨论】:

  • 6/30/2014 可能是正确的。
  • 我确认本地时区的实际日期应该是 7/01/2014。那是当地东部时间 UTC -5(-4)。但新的 Date() 对象认为这是 UTC 但事实并非如此。我想问题是日期作为时间戳返回而没有转换为UTC。

标签: javascript timestamp


【解决方案1】:

这不是已经对了吗? Timestamps are always in UTC.

您看到的是 6 月 30 日,而不是 7 月 1 日,因为当事件发生时,在 当地 时区,仍然是 6 月 30 日。例如,对我来说,它在 IST 中显示为 7 月 1 日。

此外,此时间戳表示恰好发生在 2014 年 7 月 1 日格林威治标准时间 00:00:00 的事件。印度是 ​​GMT+05:30,正如您在屏幕截图中看到的那样 - 所以如果是 local 时区,即使它是 GMT 减去一分钟,那里仍然是 6 月 30 日。

【讨论】:

  • 我确认本地时区的实际日期应该是 7/01/2014。那是当地的。但新的 Date() 对象认为这是 UTC 但不是。
  • @BelowtheRadar 当地时区是多少?
  • 东部时间 UTC -5(-4)。我想问题是日期作为时间戳返回而没有转换为UTC
  • 日期采用时间戳,时间戳始终为 UTC,您的时间戳 1404172800000 转换为 2014 年 7 月 1 日 00:00:00,您的时区为 UTC -5,转换为 2014 年 6 月 30 日 19:00 :00,所以你的代码工作正常。如果您仍然确定这会产生错误的结果,则需要检查您的服务器端代码。
  • 好吧,你是对的!时间戳应始终为 UTC,所以我应该在服务器端工作
猜你喜欢
  • 2019-08-15
  • 1970-01-01
  • 2019-01-05
  • 2013-03-23
  • 2018-09-17
  • 2018-04-17
  • 2015-04-20
  • 2011-02-06
  • 2013-06-30
相关资源
最近更新 更多