在Javascript中将时间戳转换为不同时区的值

时间:2018-03-16 22:57:56

标签: javascript datetime

我有不同的时间戳和来自API的时区作为对象。例如:

{{'ts' : 1521311400000},
 {'tz' : 'GMT+01:00'}}

如何使用toLocaleTimeString()将时间戳转换为该时区的人类可读日期?我试图将options对象中的时区作为timeZone的值here传递,但我得到invalid time zone in DateTimeFormat()错误,无法弄清楚正确的格式应该如何是。

2 个答案:

答案 0 :(得分:2)

要在格式化日期时获得这种灵活性,您可能需要查看MomentMoment Timezone

答案 1 :(得分:1)

如果您想要其他选项,可以试试这个:

function init() {
  function formatFixedTimeZone(ts, tz) {
    let offsetStr = tz.replace(/:/g, '');
    let reverseOffset = offsetStr.replace(/[-+]/, sign => sign === '+' ? '-' : '+');
    let time = new Date(ts);
    let timeStr = time.toUTCString().replace('GMT', reverseOffset);

    time = new Date(Date.parse(timeStr));
    timeStr = time.toLocaleString('en-US', {
      timeZone: 'UTC', // Don't change this from UTC for other time zones.
      weekday: 'short',
      month: 'short',
      day: 'numeric',
      year: 'numeric',
      hour: '2-digit',
      minute: '2-digit',
      second: '2-digit'
    }) + ' ' + tz;

    return timeStr;
  }

  let timeDisplay = document.getElementById('time');

  function tick() {
    let nowStr = formatFixedTimeZone(Date.now(), 'GMT+01:00');

    timeDisplay.textContent = nowStr;
  }

  setInterval(tick, 1000);
}

此处的Plunker:http://plnkr.co/edit/Gk6SOLwpWqfoT5gHlCrb?p=preview

这显示了固定时区内当前时间的运行计数,但是我试图以这样的方式编写它,如果你没有使用当前时间,但ts和tz来自您的API的价值,根据您的需求和不同的输出格式来调整它不应该太难。