javascript - 如何使用 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"
。无论如何我可以调整它来工作吗?
解决方案
正如moment.tz(..., String)
文档所述:
moment.tz 构造函数采用与构造函数相同的所有参数
moment
,但使用最后一个参数作为时区标识符。
时区标识符类似于'America/New_York'
or ,不是有效输入。'Europe/Rome'
"GMT-08:00"
在您的情况下,您可以使用moment(Number)
然后:
tz()
使用函数转换到给定区域- 或使用设置偏移量
utcOffset(String)
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
中的某天(是星期几) 1524578400000
是2018-04-24 14:00:00
UTC,我想念你为什么期望5am
输出。
推荐阅读
- spring-mvc - Spring 5 Webflux 有自己的 SNS + SQS 实现方式吗?
- angular - Ngxs - 状态未定义
- postgresql - postgresql 无法正确启动退出活动(已退出)
- ssl - 如何在 Windows 10 中安装 OpenSSL?
- jquery - .addClass() 和 .removeClass() 具有动态命名的元素
- list - 如何使用集合减法保留重复项?
- python - 使用 tensorflow-gpu 进行预测比 tensorflow-cpu 慢
- c# - 在 C# 中使用 Dictionary 存储和访问 Xml 元素
- jquery - 如何为每一行设置css边框?
- python - 在 Tkinter 的表格中显示数据的最佳方式是什么?