当前位置:  开发笔记 > 编程语言 > 正文

从moment.js对象中删除时区

如何解决《从moment.js对象中删除时区》经验,为你挑选了3个好方法。

我正在使用datetimepicker.js,它的date函数返回一个moment.js对象.它使用本地UTC偏移量并且我的原始日期具有不同的偏移量.

我的原始日期:

2015-10-01T15:00:00.000Z

我在日期时间选择器(DD-MM HH:mm)上显示的内容:

01-10 15:00

我得到了什么:

2015-10-01T15:40:00+01:00

我想要的是:

2015-10-01T15:40:00+00:00

请注意我最后如何删除+01偏移量.

如何将其应用于任何本地UTC?这是,无需手动删除01(因为它可以是任何其他本地偏移,具体取决于用户位置).

var momentDate = timePicker.data("DateTimePicker").date();
console.log(momentDate.format());
//this prints  2015-10-01T15:40:00+01:00

Matt.. 39

您需要明确指定格式.

试试这个:

momentDate.format('YYYY-MM-DDTHH:mm:ss')

这将给出结果

2015-10-01T15:40:00


Matt Johnson.. 28

听起来您正试图让用户选择基于UTC的日期和时间.因此,最好的方法是让选择器在创建开始时刻时以UTC模式运行.我不熟悉这个特定的datetimepicker,但假设在某处内部它做了类似这样的事情:

var m = moment([year, month-1, day, hour, minute]);

然后应该这样做:

var m = moment.utc([year, month-1, day, hour, minute]);

(此处显示的变量将来自选择器控件.)

理想情况下,选择器控件应该包含一个设置UTC模式的功能,以便在您告知时可以在内部执行此操作.

如果它没有这样的功能,你仍然可以补偿自己.不幸的是,你不能只是打电话.utc(),因为这会给用户选择的时间不同.因此,您必须通过将UTC时间移动原始时刻的偏移来进行补偿.

var m = // moment value from the picker
var result = moment(m).utc().add(m.utcOffset(), 'm');

然后,您可以format在结果上打电话或任何您想要的.请注意,原始时刻是克隆moment(m),这样偏移量不会丢失,切换到UTC不会干扰选择器的内部行为.

此外,请注意,这样的移动通常是一个黑客,如果做错了可能会导致错误.这里没关系,因为在应用调整时,该时刻已经处于UTC模式.但作为一般解决方案,应避免转移.最好的选择是将控件置于UTC模式开始.



1> Matt..:

您需要明确指定格式.

试试这个:

momentDate.format('YYYY-MM-DDTHH:mm:ss')

这将给出结果

2015-10-01T15:40:00



2> Matt Johnson..:

听起来您正试图让用户选择基于UTC的日期和时间.因此,最好的方法是让选择器在创建开始时刻时以UTC模式运行.我不熟悉这个特定的datetimepicker,但假设在某处内部它做了类似这样的事情:

var m = moment([year, month-1, day, hour, minute]);

然后应该这样做:

var m = moment.utc([year, month-1, day, hour, minute]);

(此处显示的变量将来自选择器控件.)

理想情况下,选择器控件应该包含一个设置UTC模式的功能,以便在您告知时可以在内部执行此操作.

如果它没有这样的功能,你仍然可以补偿自己.不幸的是,你不能只是打电话.utc(),因为这会给用户选择的时间不同.因此,您必须通过将UTC时间移动原始时刻的偏移来进行补偿.

var m = // moment value from the picker
var result = moment(m).utc().add(m.utcOffset(), 'm');

然后,您可以format在结果上打电话或任何您想要的.请注意,原始时刻是克隆moment(m),这样偏移量不会丢失,切换到UTC不会干扰选择器的内部行为.

此外,请注意,这样的移动通常是一个黑客,如果做错了可能会导致错误.这里没关系,因为在应用调整时,该时刻已经处于UTC模式.但作为一般解决方案,应避免转移.最好的选择是将控件置于UTC模式开始.



3> 小智..:

尝试这个:

let str = '2015-10-01T15:40+01:00';
let moment = moment(str).utcOffset(str)
console.log(moment.format('DD/MM/YYYY HH:mm'))
推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有