Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 使用矩.js和矩时区将日期、时间和偏移量转换为ISO8601日期时间_Javascript_Date_Timezone_Momentjs - Fatal编程技术网

Javascript 使用矩.js和矩时区将日期、时间和偏移量转换为ISO8601日期时间

Javascript 使用矩.js和矩时区将日期、时间和偏移量转换为ISO8601日期时间,javascript,date,timezone,momentjs,Javascript,Date,Timezone,Momentjs,我正在处理一些行程数据,其中时间和日期都在本地时区中提供。我正在将这些数据添加到一个数据库中,在该数据库中,我希望以UTC格式存储所有日期,并使用适当的时区偏移量。我正在尝试使用moment.js处理这些日期 日期/时间的输入字符串格式如下2020-07-12 13:00,时区格式如下Europe/Amsterdam 我想以如下字符串结束: 2020-07-12T11:00:00+02:00 我遇到的问题是,如果我使用.utc()方法,矩将我的输入时间转换为本地时间或utc 此代码为我提供了正确

我正在处理一些行程数据,其中时间和日期都在本地时区中提供。我正在将这些数据添加到一个数据库中,在该数据库中,我希望以UTC格式存储所有日期,并使用适当的时区偏移量。我正在尝试使用moment.js处理这些日期

日期/时间的输入字符串格式如下
2020-07-12 13:00
,时区格式如下
Europe/Amsterdam

我想以如下字符串结束:

2020-07-12T11:00:00+02:00

我遇到的问题是,如果我使用
.utc()
方法,矩将我的输入时间转换为本地时间或utc

此代码为我提供了正确的结果,但我不明白为什么,也不确定是否可以依赖其准确性:

var offset = moment.tz(`Europe/Amsterdam`).utcOffset();
var m = moment(`2020-07-12 13:00`, 'YYYY-MM-DD HH:mm').utc().subtract(240 + offset + offset, 'minutes').utcOffset(offset); // (240 is my own UTC offset)

如何简单地输入日期、时间和时区,并以正确的ISO8601 DateTime结束?

如果您已经在应用程序中使用了“时刻”和“时刻”时区,那么您可以简单地执行以下操作:

const m = moment.tz('2020-07-12 13:00', 'YYYY-MM-DD HH:mm', 'Europe/Amsterdam');
m.format() //=> "2020-07-12T13:00:00+02:00"
然而,团队建议在新开发中使用的时刻。等价物为:

const dt = luxon.DateTime.fromFormat('2020-07-12 13:00', 'yyyy-MM-dd HH:mm', { zone: 'Europe/Amsterdam'});
dt.toISO()  //=> "2020-07-12T13:00:00.000+02:00"
唯一的区别是包含了毫秒。如果您喜欢不同的输出,可以使用不同的格式化函数

Luxon的主要好处是,它使用了ECMAScript国际化API提供的内置时区功能,而矩时区绑定了自己的时区数据,这些数据可能相当大


另外,请注意,在您的问题中,通过询问
2020-07-12T11:00:00+02:00
您似乎误解了ISO 8601格式。在该格式中,显示的时间是当地时间。因此,它应该是
13:00
,而不是
11:00
+02:00
表示“这是本地时间与UTC的偏移量”。(这并不意味着你要用偏移量来获得当地时间。)

谢谢你的最后一段!我将对此进行测试并接受你的答案。也许这就是我不得不做这么多减法运算的原因。