Luxon.js ISO 8601解析

问题描述 投票:0回答:1

我正在使用Luxon.js来处理Date,我正在尝试解析来自服务器的一些ISO字符串。它有这种格式

2019-04-04T12:12:07+03:00

我正在使用Luxon的方法 - fromISO应该解析这个str

DateTime.fromISO("2019-04-04T12:12:07+03:00", "dd LLLL yyyy")

我期望看到2019年4月4日 - 15:12输出,但它会以某种方式返回2019年4月4日 - 12:12,我无法理解为什么会发生这种情况?

难道我做错了什么?因为当我试图使用这个ISO字符串2019-04-04T12:12:07.756Z时,它就像一个魅力。但是我不明白为什么前一个不工作,我该怎么做才能使它工作?

我会感激任何帮助!

附:说实话,我对ISO时间的知识有一些差距,如果问题很愚蠢,那就很抱歉。

javascript date iso8601 luxon
1个回答
1
投票

2019-04-04T12:12:07+03:00说“在偏移量为+3的区域中,它是12:12”。它并没有告诉Luxon增加3个小时;它提供了表达时间的背景。例如,因为偏移量为+3的区域的本地时间比UTC早3个小时(这就是它的含义),那么在英格兰它是9:12。关键在于它是地球上的特定时间,而+3只是告诉你将该时间转换为字符串时使用了什么规则。

Luxon接收了所有这些信息并计算出它的实际时间,其时间概念是自1970年初以来在UTC中发生的毫秒数。然后它可以将其转换为任何区域的本地时间。当然,如果您的计算机位于偏移量为+3的区域中,则当地时间为12:12:

-> TZ=Europe/Moscow node
> DateTime = require("luxon").DateTime
[Function: DateTime]
> var dt = DateTime.fromISO("2019-04-04T12:12:07+03:00")
undefined
> dt.toLocaleString(DateTime.TIME_24_SIMPLE)
'12:12'

我的电脑实际上在美国东海岸,所以我看到一个非常不同的当地时间:

-> node
> DateTime = require("luxon").DateTime
[Function: DateTime]
> var dt = DateTime.fromISO("2019-04-04T12:12:07+03:00")
undefined
> dt.toLocaleString(DateTime.TIME_24_SIMPLE)
'05:12'

那是因为我的偏移是-4,这意味着这里的本地时间比原始字符串中的+3早7小时。

我的计算机在任何区域,我当然可以告诉Luxon在任何其他区域中表达日期:

> dt.toUTC().toLocaleString(DateTime.TIME_24_SIMPLE)
'09:12'
> dt.setZone("Europe/Moscow").toLocaleString(DateTime.TIME_24_SIMPLE)
'12:12'
> dt.setZone("Asia/Tokyo").toLocaleString(DateTime.TIME_24_SIMPLE)
'18:12'
© www.soinside.com 2019 - 2024. All rights reserved.