只有一次输入,即开始时间
我正在尝试获取这些输入的时间戳(以毫秒为单位)
let start_time = "17:05:00";
var start_date_moment = moment(start_time, "HH:mm:ss");
console.log(start_timestamp);
output is -> moment("2019-04-24T17:05:00.000")
此输出在服务器和本地上均相同
但是当我尝试以相同的方式获取以毫秒为单位的unix时间戳
var start_timestamp = moment(start_time, "HH:mm:ss").valueOf();
在不同时区的服务器上
console.log(start_timestamp);//1556125500000
console.log(moment(start_timestamp/1000).format('YYYY-MM-DD HH:mm:ss'); //2019-04-24 17:05:00
在本地
console.log(start_timestamp);//1556105700000
console.log(moment(start_timestamp/1000).format('YYYY-MM-DD HH:mm:ss'); //2019-04-24 22:35:00
此start_timestamp值在本地和服务器上不同。但是,时间戳记不应随时区改变,所有时区都应保持不变。请帮助我。
如何在两个地方都获得正确且相同的值。我得到了与此https://github.com/moment/moment/issues/2035
相关的一些链接日期和任何特定格式都没有问题,只有时间戳才有问题。
答案 0 :(得分:1)
使用力矩(使用timezones moment.js)时,需要考虑偏移量。由于没有在输入中传递偏移量,因此该时刻将基于运行代码的计算机的时区,因此值也不同。
示例:
var a = moment.tz("2013-11-18 11:55", "Asia/Taipei");
var b = moment.tz("2013-11-18 11:55", "America/Toronto");
a.format(); // 2013-11-18T11:55:00+08:00
b.format(); // 2013-11-18T11:55:00-05:00
a.utc().format(); // 2013-11-18T03:55Z
b.utc().format(); // 2013-11-18T16:55Z
如果使用moment-timezone更改moment
对象的时区,则只会影响本地时间的值。它不会更改表示的时间,因此也不会更改底层的时间戳。
Unix Timestamp总是 (基于UTC)-您可以在世界上任何给定位置将其视为相同的时间戳记。
编辑:
如果您使用utcOffset
,则应传递一个整数:
示例:
moment.utc("2015-10-01 01:24:21").utcOffset("-240").format('YYYYMMDD HHmmss ZZ')
// "20151001 012421 +0000"
moment.utc("2015-10-01 01:24:21").utcOffset(-240).format('YYYYMMDD HHmmss ZZ')
// "20150930 212421 -0400"
MomentJS允许将偏移量参数作为字符串传递,但是它期望字符串采用ISO8601格式之一:[+/-]HH:mm
或[+/-]HHmm
。
要避免所有这些,如果知道的话,您可以将位置作为参数传递,例如
moment.tz(start_time, "HH:mm:ss", "Asia/Kolkata").valueOf();
如上面第一个示例中所述。.