【问题标题】:Parse Datetime string in local date format in javascript (preferably using luxon)在javascript中以本地日期格式解析日期时间字符串(最好使用luxon)
【发布时间】:2019-11-13 05:35:37
【问题描述】:

假设我有一个日期时间字符串10/09/2019 10:03:00.000 AM

现在,如果我在美国,我会读到 2019 年 10 月 9 日,如果我在印度,我会读到 2019 年 9 月 10 日。

所以,我的问题是如何将此字符串解析为 Date 对象,以便根据本地时区进行解析。

我正在使用luxon,但是,纯 javascript 解决方案也可以。

【问题讨论】:

  • 您所描述的与时区无关;这是基于文化的日期格式偏好,day/month/year vs month/day/year。如果您希望正确处理,您可能必须允许您的用户设置他们的日期格式偏好,但希望仅用于显示。大多数系统都希望在year-month-day hour:minute:second 中处理日期/时间戳,包括或不包括时区(+/- 偏移)。
  • fromFormat 期望提供一种格式。我想要基于文化的自动解析。我想正如蒂姆建议的那样,我需要切换到year-month-day hour:minute:second
  • 所以你真正的问题是“我如何知道用户期望什么格式”。你不能,所以以明确的格式显示时间戳,并在请求输入时告诉用户你期望的格式。

标签: javascript date datetime luxon


【解决方案1】:

使用支持在解析器中使用“宏”标记的最新版本的 Luxon:

> DateTime.fromFormat("10/09/2019 10:03:00.000 AM", "D hh:mm:ss.SSS a").toISO()
'2019-10-09T10:03:00.000-04:00'
> DateTime.fromFormat("10/09/2019 10:03:00.000 AM", "D hh:mm:ss.SSS a", { locale: "en-IN" }).toISO()
'2019-09-10T10:03:00.000-04:00'

IMO,这个解决方案很脆弱,因为 Luxon 的解析器在这里非常严格,本质上要求日期部分在该语言环境中匹配 完全 DateTime.toFormat,因此 0 填充、斜杠的差异vs 连字符等。

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 2019-09-13
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 2016-06-12
    • 2012-05-24
    • 1970-01-01
    • 2021-02-14
    相关资源
    最近更新 更多