我尝试运行这个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"
。无论如何我可以调整它吗?
答案 0 :(得分:0)
正如moment.tz(..., String)
文档所述:
moment.tz构造函数接受与
moment
构造函数相同的所有参数,但将最后一个参数用作time zone identifier。
时区标识符类似'America/New_York'
或'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
是星期几)< / LI>
1524578400000
是2018-04-24 14:00:00
UTC,我遗漏了为什么您希望5am
作为输出。答案 1 :(得分:0)
我正在研究类似的主题,并得到了您原始问题的答案。如果对您来说太晚了,希望将对其他人有所帮助。
首先,就像@VincenzoC解释的那样: 1.必须将Moment.JS的Unix时间戳更改为10位。 2.年的格式应为“ YYYY”而不是“ yyyy”。
根据此处的说明enter link description here POSIX兼容性要求偏移量是相反的。因此,Etc / GMT-X的偏移量为+ X,而Etc / GMT + X的偏移量为-X。这是IANA时区数据库的结果,而不是Moment.js的任意选择。
您需要将设置更改为: var timezoneId =“ Etc / GMT + 08”; 然后跑 moment.unix(1524578400).tz(“ Etc / GMT + 8”)。format('MMM d,YYYY H:mm:ss Z');
返回值为:“ 2018年4月2日6:00:00 -08:00” 请注意,您期望的是凌晨5点,但这是夏令时,因此返回的是凌晨6点。