首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Luxon.js ISO 8601解析

Luxon.js ISO 8601解析
EN

Stack Overflow用户
提问于 2019-04-04 12:23:23
回答 1查看 8.4K关注 0票数 2

我使用Luxon.js来处理日期,并试图解析来自服务器的一些ISO字符串。它有这样的格式

代码语言:javascript
复制
2019-04-04T12:12:07+03:00

我使用的是鲁迅的方法- fromISO,它应该解析这个str

代码语言:javascript
复制
DateTime.fromISO("2019-04-04T12:12:07+03:00", "dd LLLL yyyy")

我希望看到04 2019年4月- 15:12的输出,但它返回04 2019年4月- 12:12不知为什么会发生?

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

我会感谢你的帮助!

老实说,如果这个问题很愚蠢,我对ISO时间的知识有一些空白。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-06 05:17:45

2019-04-04T12:12:07+03:00说“在偏移量为+3的区域,是12:12”。它并没有告诉鲁迅增加3个小时,而是提供了时间表达的背景。例如,由于偏移量为+3的区域比世界协调时提前3小时(这就是它的意思),那么在英格兰是9:12。关键是,这是地球上的一个特定时间,而+3只是告诉你在把时间转换成字符串时使用了什么规则。

鲁迅接受了所有这些信息,并指出了它的真正时间,在它的时间的概念是毫秒数,从1970年初在世界协调时。然后,它可以将其转换为任何区域的本地时间。当然,如果您的计算机位于偏移量为+3的区域,那么本地时间是12:12:

代码语言:javascript
复制
-> 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'

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

代码语言:javascript
复制
-> 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小时。

在我的电脑处于任意区域的情况下,我当然可以告诉鲁迅在任何其他区域表示日期:

代码语言:javascript
复制
> 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'
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55515937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档