【发布时间】:2022-02-15 01:04:38
【问题描述】:
对象:
const DateTime = luxon.DateTime;
userInfo = {
startDate: '14/03/2022',
startTime: '12:30',
offsetShort: 'EDT',
}
从我理解的 luxon 文档中获取 offset value,必须使用这种方法:
DateTime.fromObject(new Date(userInfo.startDate), {zone: 'America/New_York'}).toFormat('ZZ');
会像这样返回偏移值: -05:00
由于我的 api 没有返回区域名称(例如:America/New_York),我想根据偏移短名称(即 IST、EST、EDT)获取偏移值。 luxon 中的任何可能性??
基本上我需要基于偏移短名称(EDT/EST/IST)的以下任何结果:
DateTime.fromObject(new Date('14-03-2022'), {zone: 'EDT'}).toFormat('ZZ'); >> -05:00
**OR**
DateTime.fromObject(new Date('14-03-2022'), {zone: 'EDT'}).toFormat('ZZ'); >> America/New_York
【问题讨论】:
-
不,我认为在 luxon 中不可能做到这一点,并且通常不鼓励使用偏移短名称,因为它们模棱两可。请参阅Time zones and offsets#Terminology 声明:命名偏移是偏移的时区特定名称,例如东部夏令时间。 [...] 它们也是模棱两可的 (...)、不标准化和国际化的(法国人会如何称呼美国的 EST?)。由于所有这些原因,在以编程方式指定时间时应避免使用它们。 Luxon 仅支持在格式化中使用它们
-
new Date('14-03-2022')几乎肯定会产生无效日期,请参阅Why does Date.parse give incorrect results?。如果您使用的是 Luxon,那么也可以使用它来解析时间戳:DateTime.fromFormat('14-03-2022', 'dd-MM-yyyy',{zone:'America/New_York'})。 -
America/New_York 推断出美国 EDT 没有的历史性和夏令时变化(美国 EDT 甚至直到 1966 年才存在,并且它的引入和停止日期随时间而变化)。美国 EDT 是 -4,而不是 -5(这是美国东部标准时间)。大多数观察 EDT 的地方也观察 EST(尽管佛罗里达州正试图全年转向观察 EDT)。看,一团糟。 :-)
标签: javascript datetime luxon