// 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]
2条答案
按热度按时间dohp0rv51#
更新
看起来这个问题是关于伊斯兰(回历)日历日期的,不幸的是我对此并不了解。
然而,JavaScript
Date
对象似乎会带来一些困难,因为它指定了一个以自1970年1月1日以来所经过的毫秒数为度量单位的对象,因此它的基础是公历系统。MDN还注意到
Date.parse()
方法只支持ISO 8601格式,这似乎也为不同的日历带来了问题。Stack Overflow上也有this post,它似乎可以解决一个非常类似的问题,使用
Intl.DateTimeFormat()
在两个日历之间工作,并可能在这里提供OP需要的答案。最后,JavaScript Temporal中的一个新的日期方法(截至2022年9月29日)仍在**阶段3的提议中***,但很可能在不久的将来成为规范的一部分。看起来
Temporal
修复了Date
对象的许多缺点,并应该允许OP在这里提出的要求( 因为日历可以指定 *)原始答案(* 无效 *)
JavaScript
Date
对象不接受语言环境作为参数,但是可以使用toLocaleString
和toLocaleDateString
等方法输出特定语言环境下的日期。因此,如果只想创建一个
Date
对象,只需传入日期/时间:在这里,您可以对新创建的
Date
对象执行任何与日期相关的计算或方法。8zzbczxx2#
Temporal API(即将成为JavaScript的一部分)可以帮助解决此用例。
虽然Temporal目前需要多边形填充(见此处的Temporal多边形填充列表),但Temporal目前正在所有主要浏览器(Chrome、Firefox、Safari等)中实现,因此在不久的将来将不需要多边形填充。
假设您使用的是
persian
日历(请参阅支持的日历here列表),您可以执行以下操作: