gpt4 book ai didi

Javascript 从 toLocaleDateString 解析已知语言环境的日期

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:28:15 27 4
gpt4 key购买 nike

背景

在我的应用程序中,我想根据用户的语言环境设置日期格式。如果用户修改日期,我希望能够将其解析回 javascript Date 对象。

问题

我想知道是否可以使用 javascript 从本地格式化的字符串中解析日期?

请考虑以下代码段:

new Date(2016, 0, 1).toLocaleDateString('ar');
>>"١‏/١‏/٢٠١٦"

如果我想将该字符串解析回有效日期,我该怎么做?

以下将不起作用:

new Date(new Date(2016, 0, 1).toLocaleDateString('ar'));
>>Invalid Date

我还尝试使用 momentjs但无法在那里找到工作方式。

//change global locale
moment.locale('ar-sa');

moment().format('L');
>>"١٥/٠٦/٢٠١٦"

moment(new moment().format('L'))._d;
>>Invalid Date

或者是否有其他/更好的方法来思考此类问题?

最佳答案

由于 JS Date 的工作方式,确实没有一个好的方法可以仅使用 Date 对象来完成此操作。它没有一致的解析行为。

Moment 会为您做到这一点,而且您实际上已经非常接近了。我不确定你为什么要立即调用 new 关键字。那没有必要。要使用 Moment 获取阿拉伯语日期:

moment.locale('ar-sa'); 
moment().format('L')
"١٥/٠٦/٢٠١٦"

将该日期解析回一个时刻:

moment("١٥/٠٦/٢٠١٦", 'L').format()
"٢٠١٦-٠٦-١٥T٠٠:٠٠:٠٠-٠٥:٠٠"

或者,如果您想要使用英文字符与 API 进行交互:

moment("١٥/٠٦/٢٠١٦", 'L').locale('en').format()
"2016-06-15T00:00:00-05:00"

请注意,当您使用“L”时,您是在告诉 moment 您正在专门寻找日期格式“DD/MM/YYYY”。作为引用,阿拉伯语沙特阿拉伯本地化日期格式如下:

    LT : 'HH:mm',
LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY HH:mm',
LLLL : 'dddd D MMMM YYYY HH:mm'

因此,无论您使用什么格式作为 moment 的第二个参数,都将是 moment 正在寻找的格式。不同的语言环境有不同的格式,因此在不同语言环境之间切换时需要小心。

如果您需要返回一个日期对象,您可以执行以下操作:

moment("١٥/٠٦/٢٠١٦", 'L').toDate()

但我必须警告您,这不是 Moment.js 中的最佳实践,除非您有需要使用日期的第三方 API。 Moment 是一个完整的 API(比 JS Date 更好),因此您需要编写的任何与日期和时间操作相关的代码最好在 Moment 生态系统中完成。

关于Javascript 从 toLocaleDateString 解析已知语言环境的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37832938/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com