首页 > 解决方案 > 如何使用 moment-tz.js 解析 tz,如“GMT-08:00”

问题描述

我尝试运行这个 js

return function(milliSeconds, timeZoneId) {
    if (milliSeconds == 0) {
        return "";
    }
    var now = moment();

    return now.tz(timeZoneIdm, milliSeconds).format('MMM d, yyyy H:mm:ss'); 
}

例如,使用此输入:

milliSeconds = "1524578400000"

timezoneId = "GMT-08:00"

解析失败"GMT-08:00"。无论如何我可以调整它来工作吗?

标签: javascripttimemomentjs

解决方案


正如moment.tz(..., String)文档所述:

moment.tz 构造函数采用与构造函数相同的所有参数moment,但使用最后一个参数作为时区标识符

区标识符类似于'America/New_York'or ,不是有效输入。'Europe/Rome'"GMT-08:00"

在您的情况下,您可以使用moment(Number)然后:

var milliSeconds = "1524578400000";
var timezoneId = "GMT-08:00";

var timeInt = parseInt(milliSeconds, 10)
var m1 = moment(timeInt).tz('America/Los_Angeles');
console.log(m1.format('MMM D, YYYY H:mm:ss'));

var offset = timezoneId.substring(3);
var m2 = moment(timeInt).utcOffset(offset);
console.log(m2.format('MMM D, YYYY H:mm:ss'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.14/moment-timezone-with-data-2012-2022.min.js"></script>

请注意:

  • 时刻格式化标记区分大小写,因此您必须使用YYYY多年和D一个月d中的某天(是星期几)
  • 15245784000002018-04-24 14:00:00UTC,我想念你为什么期望5am输出。

推荐阅读