将波斯日期转换为朱利安或格里高利与基思伍德日历

Convert Persian date to Julian or Gregorian with keith wood calendars

本文关键字:高利 日历 日期 转换 朱利安      更新时间:2023-09-26

我用Keith Wood日历库创建了一个日期对象:

var d = $.calendars.newDate(1393, 5, 6, 'persian', 'fa'); 

现在我需要从这个日期得到儒略历或公历日期,但是当我使用.toJD()函数时,它返回的儒略历日期不等于

中的当前日期
 var e = d.toJD();
 console.log(e) 

那么我如何解决这个问题呢?我为这个问题创建了一个jsbin。

我认为toJD()不是你需要的。

var d = $.calendars.newDate(1388, 1, 1, 'persian', 'fa');
console.log("Persian date: "+d.toLocaleString()); // Persian date: 1388-01-01
var e = d.toJSDate();
console.log(e); // Sat Mar 21 2009 00:00:00 GMT+0100 (Romance Standard Time)

UPDATE:对于您的评论,我看到这个问题没有解决,因为它将波斯语日期转换为您的地区日期。据我所知,在库的参考中,没有办法告诉该函数应该使用哪个区域设置。因此,正如作者提供的演示所示,正确的方法是创建另一个目标日历,并将当前日历作为参数传递:

var d = $.calendars.newDate(1388, 1, 1, 'persian', 'fa');
var e = $.calendars.newDate(d, 'gregorian', 'fa');

将波斯语日期转换为任何其他日历日期的另一种方法是使用ECMAScript提案"Temporal"

下面的函数将波斯语日期转换为Javascript中18种可用日历中的任何一种。默认值是转换为公历日期。

您可以指定要转换的目标日历以及要使用的格式和区域设置:

<script type='module'>
// ====== load Temp polyfill (not needed after implementation) ========
    import * as TemporalModule from 'https://cdn.jsdelivr.net/npm/@js-temporal/polyfill@0.3.0/dist/index.umd.js'
//=====================================================================

//---------------------------------------
function persianToCalendars(Y, M, D, options={}) {
return new Intl.DateTimeFormat(options.locale??="en",options).format(new Date(temporal.Temporal.PlainDateTime.from({year:Y,month:M,day:D,calendar:'persian'}).toString().split("[")[0]));
}
//---------------------------------------

console.log(persianToCalendars(1400,12,6));    // default
console.log(persianToCalendars(1400,12,6,{dateStyle: "full"}));
console.log(persianToCalendars(1400,12,6,{locale: "fa"}));
console.log(persianToCalendars(1400,12,6,{dateStyle:"full", locale: "fa"}));
console.log(persianToCalendars(1400,12,6,{calendar:"islamic", dateStyle:"full"}));   // to islamic full 'en' locale
console.log(persianToCalendars(1400,12,6,{locale:"fa", calendar:"islamic", dateStyle:"full"}));  // to islamic 'fa' locale

</script>