【问题标题】:Trying to convert Unix Epoch time into UTC localized date/time string尝试将 Unix 纪元时间转换为 UTC 本地化日期/时间字符串
【发布时间】:2015-10-19 18:56:21
【问题描述】:

我的目标是将表示 Unix 纪元时间(或自 1970 年 1 月 1 日午夜以来的毫秒数)的整数转换为 UTC(或 GMT)时区的本地化时间。

所以我有这个方法:

function formatDateTimeFromTicks(nTicks)
{
    //'nTicks' = number of milliseconds since midnight of January 1, 1970
    //RETURN:
    //      = Formatted date/time
    return new Date(nTicks).toLocaleString();
}

作为一个例子,我使用1442004135000 的值,这应该为我的语言环境提供‎9‎/‎11‎/‎2015‎ 8‎:‎42‎:‎15‎ ‎PM(您可以检查here),但我的方法:

alert(formatDateTimeFromTicks(1442004135000));

给我‎‎9‎/‎11‎/‎2015‎ ‎1‎:‎42‎:‎15‎ ‎PM

知道为什么以及如何解决它吗?

【问题讨论】:

  • 您的区域设置是什么?我晚上 8 点 42 分,我的时区设置为 CEST。准确地说,我得到“2015 年 9 月 11 日 22:42:15 UTC+2”
  • @Touffy:在这种情况下,时区无关紧要,因为我需要它来显示 UTC(或格林威治)时区的时间。区域设置应仅用于格式化日期/时间本身。换句话说,它不应该转换任何东西。
  • 对,抱歉,您需要 UTC。希望我的回答有帮助。
  • 感觉就像new Date(nTicks) 转换成当地时间。我不知道为什么?
  • 您可以要求 new Date().toUTCString() 但您不能以本地语言环境格式获得它。

标签: javascript localization locale unix-timestamp


【解决方案1】:

本机 Date 对象是不够的,因为即使在最好的情况下,它也不会为您提供 UTC 语言环境字符串。我强烈建议您使用出色的 moment 库,以便在所有平台上获得可靠的行为。

用法语显示漂亮的本地化 UTC:

moment(1442004135000).utc().locale('fr').format('LLLL')

=> "vendredi 2015 年 9 月 11 日 20:42"

【讨论】:

  • 谢谢,但这是一个关于“纯”JavaScript 的问题。我不想为了显示一个日期而将整个库“拖”到我的页面中。这正是如今互联网如此臃肿的原因!
  • 我不习惯将库拖到我的答案中(特别是我有点讨厌到处看到 jQuery),但在这种情况下,原生对象很糟糕,而且时刻真的很好。如果您想使用本机日期获得相同的结果,您必须猜测本地化输出的哪一部分是小时,然后将其更改为更正时区。
猜你喜欢
  • 2021-12-31
  • 2011-06-13
  • 2015-12-19
  • 2012-04-03
  • 2018-02-18
  • 2014-02-22
  • 2021-08-08
  • 1970-01-01
  • 2015-12-22
相关资源
最近更新 更多