【问题标题】:How to display local time (considering timezone)?如何显示当地时间(考虑时区)?
【发布时间】:2017-02-06 00:47:08
【问题描述】:

我正在制作信使,我需要在用户时区显示消息时间。目前,由于时区,我与服务器消息和客户端消息的时间不同。

当在客户端创建消息时 datetime 字段等于 new Date():

function Message(sender) {
    ...
    this["datetime"] = new Date(); 
    ...

当从服务器收到消息时,日期时间字段是来自服务器的 ctime。此代码显示消息时间:

chatMessageTime.innerHTML = new Date(message["datetime"]).toLocaleString("ru", {
    "hour": "numeric",
    "minute": "numeric"
  });

正如我之前所说,因此我在不同的时区有时间。如何解决这个问题呢?如何显示所有消息的用户时区?

【问题讨论】:

  • 那么服务器是在不同时区存储时间,还是你将它们全部转换为服务器时间之前?
  • @Zze 服务器以 unix 时间格式存储日期时间。
  • @charlietfl 那么是服务器问题吗?服务器是否应该以 UTC 而不是 Unix 时间格式存储日期时间?
  • @AlexanderShpindler:Unix 时间格式(只要您正确执行)被定义为 UTC。但是,如果您进行任何转换,那么您有责任正确完成转换。
  • 不要相信客户端时间设置,它可以是任何东西。对所有内容使用服务器时间并保持 UTC。仅在客户端上转换为“本地”并且仅用于显示目的。或许见Convert UNIX timestamp to date time

标签: javascript datetime time timezone localtime


【解决方案1】:

javascript 中,日期会自动以用户当前的语言显示: 例如,日期“2017 年 2 月 5 日 23:08:23 GMT-0300”在我的浏览器中显示为“2017 年 2 月 6 日星期一 00:08:23 GMT-0200”。

console.log(new Date('Sun Feb 05 2017 23:08:23 GMT-0300'));

【讨论】:

  • 不一定,Date.prototype.toString 的输出完全依赖于实现,尽管大多数浏览器至少似乎已经选择了RFC2822 的版本。但是,时区指示符之类的东西得到不一致的支持。 SO 控制台似乎总是使用带有 UTC 的 ISO 8601,所以根本没有本地化。
  • 好的,谢谢大家的帮助。我决定使用黑客。在聊天初始化期间,我计算时间之间的差异并简单地使用它来显示本地时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-16
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
相关资源
最近更新 更多