在JavaScript中从其他语言环境中的年、月和日获取日期对象



我有年、月和日,比如:

let dt = '1401/01/01'

在区域设置中,如:

let locale = 'fa-IR'

如何在不使用某些库的情况下从中创建日期对象?

类似于:

new Date(dt,locale)

Temporal API很快将成为JavaScript的一部分,它可以帮助实现这个用例。

虽然Temporal目前需要一个polyfill(请参阅此处的Temporal polyfill列表(,但Temporal当前正在所有主要浏览器(Chrome、Firefox、Safari等(中实现,因此在不久的将来将不需要polyfill。

假设您使用的是persian日历(请参阅此处支持的日历列表(,您可以执行以下操作:

// Temporal polyfill. See https://github.com/tc39/proposal-temporal#polyfills
// has a list of actively-developed polyfills.
// Replace this import with whatever is required by your favorite polyfill.
import { Temporal } from '@js-temporal/polyfill';
let dt = '1401/01/01';
const [year, month, day] = dt.split('/');
// Create a Temporal.PlainDate object, interpreting year, month, and day
// according to the Persian calendar.
const date = Temporal.PlainDate.from({year, month, day, calendar: 'persian'});
// Format this date in Farsi, using the Persian calendar
console.log (date.toLocaleString('fa-IR', { calendar:'persian' }));
// => ۱۴۰۱/۱/۱
// Format this date in English, using the Persian calendar
console.log (date.toLocaleString('en-IR', { calendar:'persian' }));
// => 1/1/1401 AP
// Format this date in English, using the Gregorian calendar
console.log (date.withCalendar('gregory').toLocaleString('en-US', { calendar:'gregory' }));
// => 3/21/2022
// Format this date into a cross-platform, computer-readable format
console.log (date.toString());
// => 2022-03-21[u-ca=persian]

更新

问题似乎是关于伊斯兰历日期的,不幸的是,我对伊斯兰历日期了解不多。

然而,JavaScriptDate对象似乎会遇到困难,因为它指定了一个以自1970年1月1日以来经过的毫秒数衡量的对象。因此,它的基础是公历系统。

MDN还指出,Date.parse()方法只支持ISO8601格式,这似乎也给不同的日历带来了问题。

还有一篇关于Stack Overflow的文章,它似乎解决了一个非常相似的问题,使用Intl.DateTimeFormat()在两个日历之间工作,并可能在这里提供OP所需的答案。

最后,JavaScript Temporal中日期的一种新方法(截至2022年9月29日(仍在第三阶段提案中,但很可能在不久的将来成为规范的一部分。Temporal似乎修复了Date对象的许多缺点,并且应该允许OP在这里询问什么(因为可以指定日历(

原始答案(无效(

JavaScriptDate对象不将区域设置作为参数。但是,您可以使用toLocaleStringtoLocaleDateString等方法来输出特定区域设置中的日期。

因此,如果你只想创建一个Date对象,你只需要输入日期/时间:

let dt = new Date("1401/01/01");

从那里,您可以在新创建的Date对象上预生成任何与日期相关的计算或方法。如果您需要在特定的语言环境中输出日期,可以使用toLocaleString:

let dt = new Date("1401/01/01");
console.log(dt.toLocaleString("fa-IR"));

相关内容

  • 没有找到相关文章

最新更新