【问题标题】:Convert UTC unixTimeStamp to MM/DD/YYYY HH:MM:SS TIMEZONE without any external JS libraries将 UTC unixTimeStamp 转换为 MM/DD/YYYY HH:MM:SS TIMEZONE,无需任何外部 JS 库
【发布时间】:2025-11-23 07:15:01
【问题描述】:

我有 UTC 格式的 unix TimeStamp 值。我想将该时间戳转换为带有时区的本地日期和时间。

通过使用以下代码,我可以转换为 UTC 日期和时间

function convertTimestamp(timestamp) {
  var d = new Date(timestamp * 1000),
    yyyy = d.getFullYear(),
    mm = ('0' + (d.getMonth() + 1)).slice(-2),
    dd = ('0' + d.getDate()).slice(-2),
    hh = d.getHours(),
    h = hh,
    min = ('0' + d.getMinutes()).slice(-2),
    time;
    time = yyyy + '-' + mm + '-' + dd + ', ' + h + ':' + min + ' ';
  return time;
}

例子:

3680283088 => 2017 年 5 月 10 日 13:46:49 EDT

请推荐正确的方法将UTC时间戳转换为带有时区的本地日期和时间。

【问题讨论】:

  • timestamp 3680283088 给出的日期是 2086 年,您确定这是正确的值吗?
  • 它只是一个虚拟值
  • 在这种情况下,我认为完全值得使用库——我个人喜欢moment.js。要处理时区,您还需要moment timezone。另一个细节是像EDT 这样的短名称是ambiguous and not standard。更喜欢使用IANA timezones names(始终采用Region/City 格式,如America/New_YorkEurope/Berlin
  • @Hugo - 在这种情况下,缩写是显示值的一部分,所以它不是一个 tzid 的地方。但是,有些缩写确实是模棱两可的,tzdb 一直在删除“发明”的缩写,用数字偏移代替它们。所以是的,这有很多问题。另外,不要忘记 Intl/402,正如我在回答中所展示的那样。它现在几乎无处不在,是开始使用它的好时机。 :)
  • 是的,确实如此(我维护它)。并同意你的看法。只是 OP 要求没有外部依赖的解决方案。

标签: javascript datetime timezone


【解决方案1】:

如果环境完全实现了the ECMA-402 specification,您也许可以使用toLocaleString,并提供如下一些选项:

var d = new Date(yourTimestamp);
var s = d.toLocaleString('en-US', {hour12: false, timeZoneName: 'short'}).replace(',','');
// example: "8/16/2017 12:58:07 PDT"

请注意,replace 是因为在我的 Chrome 浏览器上,日期和时间部分之间有一个逗号,而您没有要求。另请注意,其他实现可能会有所不同,因此不能保证在任何地方都能为您提供完全相同的输出。

【讨论】: