Javascript 使用矩.js和矩时区将日期、时间和偏移量转换为ISO8601日期时间
我正在处理一些行程数据,其中时间和日期都在本地时区中提供。我正在将这些数据添加到一个数据库中,在该数据库中,我希望以UTC格式存储所有日期,并使用适当的时区偏移量。我正在尝试使用moment.js处理这些日期 日期/时间的输入字符串格式如下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 此代码为我提供了正确
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的偏移量”。(这并不意味着你要用偏移量来获得当地时间。)谢谢你的最后一段!我将对此进行测试并接受你的答案。也许这就是我不得不做这么多减法运算的原因。