如何将javascript日期转换为hijri格式?

如何将javascript日期转换为hijri格式?,javascript,angularjs,date,Javascript,Angularjs,Date,嗨,我正在用Angularjs/JavaScript开发web应用程序。我有一个日历选择器,我从前端捕捉日期。在数据库中保存所选日期时,我希望以Hijri格式保存。我遵循了,当我在writeIslamicDate中通过1时,效果很好。 例如: var today=new Date(); writeIslamicDate(today); 如果我传递今天的日期,那么它会给我未定义,NaN未定义NaN AH,那么我可以知道在将输入传递到writeIslamicDate之前是否需要转换为任何格式吗?有

嗨,我正在用Angularjs/JavaScript开发web应用程序。我有一个日历选择器,我从前端捕捉日期。在数据库中保存所选日期时,我希望以Hijri格式保存。我遵循了,当我在writeIslamicDate中通过1时,效果很好。 例如:

var today=new Date();
writeIslamicDate(today);

如果我传递今天的日期,那么它会给我
未定义,NaN未定义NaN AH
,那么我可以知道在将输入传递到writeIslamicDate之前是否需要转换为任何格式吗?有人能帮我吗?任何帮助都将不胜感激。谢谢。

您可以使用moment-hijri.js作为一个强大的库来转换日期


您只需对链接的功能稍作调整即可。要允许输入日期作为可选调整,您需要允许传入日期,以便进行以下更改:

function writeIslamicDate(adjustment) {
  ...
  var iDate = kuwaiticalendar(adjustment);

致:

不管你有没有约会都可以。下面是完整的修改代码(稍微清理一下)。您还可以尝试使用选项,这些选项不仅可以转换为伊斯兰日历,还可以使用主机的默认语言

//返回数学模型,而不是javascript模型
//例如,gmod(-3,2)返回1,而-3%2返回-1
函数gmod(n,m){
返回((n%m)+m)%m;
}
/*@param{Date}Date-可选,默认为今天
**@param{number}adjust-optiona,调整日期的天数
*/
科威特伦达函数(日期,调整){
var today=日期?新日期(+日期):新日期();
如果(调整){
today.setDate(today.getDate()++adjust);
}
var day=today.getDate();
var month=today.getMonth();
var year=today.getFullYear();
var m=月份+1;
var y=年份;
if(m<3){
y-=1;
m+=12;
}
var a=数学楼层(y/100);
变量b=2-a+数学层(a/4);
如果(y<1583)b=0;
如果(y==1582){
如果(m>10)b=-10;
如果(m==10){
b=0;
如果(第4天)b=-10;
}
}
var jd=数学层(365.25*(y+4716))+数学层(30.6001*(m+1))+日+b-1524;
b=0;
如果(jd>2299160){
a=数学楼层((jd-1867216.25)/36524.25);
b=1+a-数学楼层(a/4);
}
var bb=jd+b+1524;
var cc=数学下限((bb-122.1)/365.25);
var dd=数学楼层(365.25*cc);
var ee=数学楼层((bb-dd)/30.6001);
日=(bb-dd)-数学层(30.6001*ee);
月=ee-1;
如果(ee>13){
cc+=1;
月份=ee-13;
}
年份=cc-4716;
var wd=gmod(jd+1,7)+1;
var iyear=10631./30。;
var epochastro=1948084;
var epochcivil=1948085;
var shift1=8.01/60。;
var z=jd-epochastro;
var cyc=数学楼层(z/10631);
z=z-10631*cyc;
var j=数学楼层((z-shift1)/iyear);
var iy=30*cyc+j;
z=z-数学楼层(j*iyear+shift1);
var im=数学楼层((z+28.5001)/29.5);
如果(im==13)im=12;
变量id=z-数学楼层(29.5001*im-29);
返回[
日,//计算日(CE)
月份-1,//计算月份(CE)
年份,//计算年份(CE)
jd-1,//朱利安日数
wd-1,//工作日编号
id,//伊斯兰日期
im-1,//伊斯兰月
伊斯兰年
];
}
函数writeIslamicDate(日期,调整){
var wdNames=[“亚哈”、“伊瑟宁”、“图拉塔”、“阿尔巴”、“哈姆斯”、“朱穆阿”、“萨布”];
var iMonthNames=[“Muharram”、“Safar”、“Rabi'ul Awwal”、“Rabi'ul Akhir”、“Jumadal Ula”、“Jumadal Akhira”,
“Rajab”、“Sha'ban”、“Ramadan”、“Shawwal”、“Dhul Qa'ada”、“Dhul Hijja”];
var iDate=科威特伦达(日期,调整);
var outputIslamicDate=WDNAME[iDate[4]+”,“+iDate[5]+”+
iMonthNames[iDate[6]+''+iDate[7]+“AH”;
返回输出日期;
}
//没有日期或调整
log(writeIslamicDate());
//没有日期,调整到明天
log(writeIslamicDate(未定义,1));
//日期为2017年1月1日
控制台日志(writeIslamicDate(新日期(2017,0,1));
//2017年1月1日的日期,调整为-1天

控制台日志(writeIslamicDate(新日期(2017,0,1),-1))谢谢。那么应该下载moment.js对吗?我试过使用document.write(矩('2014-11-28 16:40:00','YYYY-M-D HH:mm:ss').endOf('iMonth').format('iyyy/iM/iD HH:mm:ss');什么都没有2014-11-28 16:40:00的hijri日期是什么?我得到了i2014/i11/i28 16:40:00?你好。上述方法对我不起作用?你能告诉我我想用哪种格式在writeIslamicDate(????)中传递日期吗?我正在尝试制作一个JSFIDEL示例。你应该使用moments.js库和momente-hijri.js库保持libs的相同顺序
function writeIslamicDate(adjustment) {
  ...
  var iDate = kuwaiticalendar(adjustment);
function writeIslamicDate(date, adjustment) {
  ...
  var iDate = kuwaiticalendar(date, adjustment);
function kuwaiticalendar(adjust) {
  var today = new Date();
function kuwaiticalendar(date, adjust) {
  var today = date || new Date();