如何在不改变时间的情况下使用moment.js更改时区?

时间:2018-01-10 15:31:32

标签: javascript momentjs

我有一个datepicker,它以dddd, MMMM DO YYYY, h:mm:ss a格式将本地时间返回给变量localTime。我可以选择从包含<select>时区名称的moment.tz.names()更改时区。当时区发生变化时,我需要在不更改时间的情况下将localTime的时区更改为新时区。如何使用moment.js

进行此操作
let timeString = "Wednesday, January 10th 2018, 9:10:19 pm";
let localTime = moment(timeString, 'dddd, MMMM DO YYYY, h:mm:ss a').format('YYYY-MM-DD HH:mm:ss ZZ');
let localTimeInUtc = moment(timeString, 'dddd, MMMM DO YYYY, h:mm:ss a').utc().format('YYYY-MM-DD HH:mm:ss ZZ');
let newTimezone = "EST";
let newTime = moment(timeString, 'dddd, MMMM DO YYYY, h:mm:ss a').tz(newTimezone).format('YYYY-MM-DD HH:mm:ss ZZ');
let newTimeInUtc = moment(timeString, 'dddd, MMMM DO YYYY, h:mm:ss a').tz(newTimezone).utc().format('YYYY-MM-DD HH:mm:ss ZZ');
console.log(localTime);
console.log(localTimeInUtc);
console.log(newTime);
console.log(newTimeInUtc);

此处UTC时间与localTimenewTime

相同

1 个答案:

答案 0 :(得分:1)

根据Docs

也许您正在寻找以下代码中的format2

format1 - 创建时刻并设置时区(不会更新偏移量)。 format2 - 使用给定的时区创建时刻。

var date = moment().format("dddd, MMMM D YYYY, h:mm:ss a"), format = "dddd, MMMM D YYYY, h:mm:ss a", timezone = "America/New_York";
var format1 = moment(date,format).tz(timezone);
var format2 = moment.tz(date, format,timezone);
console.log(format1.format(format)+" -> "+format1.format());
console.log(format2.format(format)+" -> "+format2.format());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.14/moment-timezone-with-data.min.js"></script>

请参阅此Github issue一次。