moment-timezone将utc更改为默认时区

时间:2020-05-14 17:35:39

标签: javascript momentjs moment-timezone

上下文:

我需要将UTC的日期时间解析为使用moment.tz.setDefault的moment-timezone当前设置为默认的时区。

尝试(功能性):

const task = {
    startDate: '2020-03-24 14:00:00'
};

const startDateMoment = moment.utc(task.startDate).tz(moment().tz());

但是,每次需要设置时区时,我都会创建一个新的矩对象。在utc和默认时区之间转换还是从瞬间获取默认时区,是否有更高性能的方法?

moment.tz.guess()从浏览器猜测时区,而不是手动设置的时区。

console.log(`default timezone: "${moment().tz()}", guessed timezone: "${moment.tz.guess()}"`);

返回

default timezone: "US/Samoa", guessed timezone: "America/Vancouver"

1 个答案:

答案 0 :(得分:1)

经过一番挖掘,我确实发现了以下内容,无证,使用自己的风险,可以随时消失属性:

moment.defaultZone.name

moment.defaultZoneZone Object,我们实际上只关心name属性。

请注意,如果您尚未设置默认值,则为null!在下面的代码中,我利用了两个新的JavaScript功能optional chainingthe nullish coalescing operator来查看是否设置了默认区域,如果没有设置,请使用moment.tz.guess()值。 / p>

const task = {
    startDate: '2020-03-24 14:00:00'
};

console.log('before setting default: ', moment.defaultZone);

moment.tz.setDefault('US/Samoa');

console.log('after setting default: ', moment.defaultZone);

const startDateMoment = moment.utc(task.startDate).tz(moment.defaultZone?.name ?? moment.tz.guess());

console.log(startDateMoment.format());
<script src="https://momentjs.com/downloads/moment.min.js"></script>
<script src="https://momentjs.com/downloads/moment-timezone-with-data.min.js"></script>