2015-12-02 42 views
14

我正在使用datetimepicker.js及其date函数返回moment.js对象。它使用当地的UTC偏移量,而我的原始日期有不同的偏移量。从moment.js对象中删除时区

我原来的日期:

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 
+0

能否请您提供一些代码或小提琴演示?这很简单,但我不知道在这个datetimepicker控件中使用了哪些API。 –

回答

14

这听起来像你正试图让用户选择一个基于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模式以开始。

+0

对我来说,只有当我使用'var result = moment(m).add(m.utcOffset(),'m')。utc();'。如果utc()在添加之前,utcOffset不会输出任何东西 – TheFullResolution

+0

@TheFullResolution - 我想也许你做了'm.utc()。add ...'而不是'moment(m).utc()。add .. 。' –

+0

你是对的,我的错 – TheFullResolution

12

您需要明确指定格式。

试试这个:

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

这会给结果作为

2015-10-01T15:40:00