Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从moment.js对象中删除时区_Javascript_Datetimepicker_Momentjs - Fatal编程技术网

Javascript 从moment.js对象中删除时区

Javascript 从moment.js对象中删除时区,javascript,datetimepicker,momentjs,Javascript,Datetimepicker,Momentjs,我正在使用它的date函数返回一个对象。它使用本地UTC偏移量执行此操作,并且我的原始日期具有不同的偏移量 我的原始日期: 2015-10-01T15:00:00.000Z 我在日期时间选择器上显示的内容(DD-MM HH:MM): 我得到的是: 2015-10-01T15:40:00+01:00 我想要的是: 2015-10-01T15:40:00+00:00 请注意,我是如何删除结尾处的+01偏移的 如何将其应用于任何本地UTC?也就是说,无需手动移除01(因为它可以是任何其他本地偏移

我正在使用它的
date
函数返回一个对象。它使用本地UTC偏移量执行此操作,并且我的原始日期具有不同的偏移量

我的原始日期:

2015-10-01T15:00:00.000Z
我在日期时间选择器上显示的内容(
DD-MM HH:MM
):

我得到的是:

2015-10-01T15:40:00+01:00
我想要的是:

2015-10-01T15:40:00+00:00
请注意,我是如何删除结尾处的+01偏移的

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


听起来您正试图让用户选择基于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
或根据需要对结果执行任何操作。请注意,原始力矩是用
力矩(m)
克隆的,这样偏移量就不会丢失,切换到UTC也不会干扰选择器的内部行为


另外,请注意,像这样的转换通常是一种黑客行为,如果做得不对,可能会导致错误。这里没有问题,因为应用调整时,该时刻已经处于UTC模式。但作为一个普遍的解决方案,应该避免转移。最好的选择是首先将控件置于UTC模式。

您需要明确指定格式

试试这个:

momentDate.format('YYYY-MM-DDTHH:mm:ss')
这将给出如下结果:

2015-10-01T15:40:00


不是一个干净的解决方案,但你可以这样做

momentDate.format('YYYY-MM-DDTHH:mm:ss') + '00:00';
这将删除时区,然后将“00:00”部分追加回。这是为了扩展Matt的答案

那会给你什么

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

这对我很有用:

let date = "2017-02-01 15:20:00.00";
let pattern = "YYYY-MM-DD HH:mm:ss.SS"
let d = moment(date, pattern).utc(false);
它仍然会说它考虑了时区,但我发现它没有

LOG: 'ParseDateStr::2017-2-1 15:20:00.0000000
ParsedDate::Wed Feb 01 2017 15:20:00 GMT+0100 (Central European Standard Time)'
通常,只要
时刻(日期、模式)
它就会解析为
16:20:00

尝试以下方法:

momentDate.format('YYYY-MM-DDTHH:mm:ss')
let str='2015-10-01T15:40+01:00';
让力矩=力矩(str)。utcOffset(str)
console.log(矩格式('DD/MM/YYYY HH:MM'))

您能提供一些代码或小提琴来演示吗?这对于moment来说非常简单,但我不知道您在这个datetimepicker控件中使用了哪些API。对我来说,只有在使用
var result=moment(m).add(m.utcOffset(),'m').utc()时,它才起作用。如果utc()在add之前,utcOffset不会输出anything@TheFullResolution-我想你可能做了
m.utc()。添加了…
而不是
moment(m.utc()。添加…
这会删除时区吗?是的,确实是@Jordan
LOG: 'ParseDateStr::2017-2-1 15:20:00.0000000
ParsedDate::Wed Feb 01 2017 15:20:00 GMT+0100 (Central European Standard Time)'