波斯历和公历的转换
来源:互联网 发布:车主数据贩卖 编辑:程序博客网 时间:2024/04/30 14:24
波斯历和公历的转换
Persia & Gregorian Convert 公历和伊朗历法转换(Calendar convertor between Persian and Gregorian)
/**********************************************************
函数名称:calendarToPersian
函数说明:公历转换为波斯历
传入参数:datetimeValue:需要进行转换的公历日期值
返回:转换后的日历值
***********************************************************/
function calendarToPersian(datetimeValue)
{
var yearValue = datetimeValue.substring(0,4);//Year value
var monthValue = datetimeValue.substring(5,7)*1;//Month value
var dayValue =datetimeValue.substring(8,10)*1;//Day value
monthValue -= 1;
var persianDate = getPersianDay(yearValue,monthValue,dayValue);
persianDate.month += 1;
persianDate.month = persianDate.month.toString().length==1?"0"+persianDate.month:persianDate.month;
persianDate.day = persianDate.day.toString().length==1?"0"+persianDate.day:persianDate.day;
return persianDate.year+"-"+persianDate.month+"-"+persianDate.day
}
/**********************************************************
函数名称:persianToGregorian
函数说明:转换波斯历为公历
传入参数:datetimeValue:需要进行转换的波丝历日期值
返回:转换后的日历值
***********************************************************/
function persianToGregorian(datetimeValue)
{
var persiaYear = datetimeValue.substring(0,4)*1;//Year value
var persiaMonth = datetimeValue.substring(5,7)*1;//Month value
var persiaDay =datetimeValue.substring(8,10)*1;//Day value
persiaMonth -= 1;
var julianDay = setJulianDay(pj(persiaYear > 0 ? persiaYear: persiaYear + 1, persiaMonth, persiaDay));
julianDay.month = julianDay.month.toString().length==1?"0"+julianDay.month:julianDay.month;
julianDay.day = julianDay.day.toString().length==1?"0"+julianDay.day:julianDay.day;
return julianDay.year+"-"+julianDay.month+"-"+julianDay.day;
}
/**********************************************************
函数名称:getPersianDay
函数说明:根据输入的日期获得Persia日期值
传入参数:year,month,day
返回:转换后的日历值
***********************************************************/
function getPersianDay(year,month,day)
{
var julianDay = getJulianDay(year,month,day);
var r = jp(julianDay);
var y1 = y(r);
var m1 = m(r);
var d1 = d(r);
y1 = y1 > 0?y1:y1-1;
var persiaDate = new Object();
persiaDate.year = y1;
persiaDate.month = m1;
persiaDate.day = d1;
return persiaDate;
}
/**********************************************************
函数名称:getJulianDay
函数说明:根据输入的日期获得公历日期值
传入参数:year,month,day
返回:转换后的日历值
***********************************************************/
function getJulianDay(year,month,day)
{
var current = new Date();
var hour = current.getHours();
var min = current.getMinutes();
var sec = current.getSeconds();
return div(new Date(year,month,day,8,1,1) - JULIAN_EPOCH_MILLIS, ONE_DAY_MILLIS);
}
/**********************************************************
函数名称:setJulianDay
函数说明:根据输入的日期获得公历日期值
传入参数:julianDay
返回:转换后的日历值
***********************************************************/
function setJulianDay(julianDay)
{
var current = new Date();
var year = current.getYear();
var month = current.getMonth();
var day = current.getDay();
var datetimevalue = JULIAN_EPOCH_MILLIS + julianDay * ONE_DAY_MILLIS + mod(new Date(year,month,day,8,1,1) - JULIAN_EPOCH_MILLIS, ONE_DAY_MILLIS);
var current = new Date(datetimevalue);
var julianDate = new Object();
julianDate.year = current.getYear();
julianDate.month = eval(current.getMonth()+1);
julianDate.day = current.getDate();
return julianDate;
}
/**********************************************************
函数名称:jp
函数说明:公历转换为波斯历
传入参数:julianDay
返回:转换后的日历值
***********************************************************/
function jp(j)
{
var a = j - pj(475, 0, 1);
var b = div(a, 1029983);
var c = mod(a, 1029983);
var d = c != 1029982? div(2816 * c + 1031337, 1028522): 2820;
var year = 474 + 2820 * b + d;
var f = (1 + j) - pj(year, 0, 1);
var month = f > 186? Math.ceil((f - 6) / 30) - 1: Math.ceil(f / 31) - 1;
var day = j - (pj(year, month, 1) - 1);
return (year << 16) | (month << 8) | day;
}
/**********************************************************
函数名称:pj
函数说明:波斯历转换为公历
传入参数:y,m,d
返回:转换后的日历值
***********************************************************/
function pj(y, m, d)
{
var a = y - 474;
var b = mod(a, 2820) + 474;
return (EPOCH - 1) + 1029983 * div(a, 2820) + 365 * (b - 1) + div(682 * b - 110, 2816) + (m > 6? 30 * m + 6: 31 * m) + d;
}
function div(a,b)
{
return Math.floor(a / b);
}
function mod(a,b)
{
return (a - b * Math.floor(a / b));
}
function y(r)
{
return r>>16;
}
function m(r)
{
return (r & 0xff00) >> 8;
}
function d(r)
{
return (r & 0xff);
}
-------------------------------------------------
返回日期值时一定要注意:getYear(),getMonth(),getDate(),而不是使用getDay()!
说明:将公历转换为波斯历(Persian Calendar)时,调用方法calendarToPersian();
将波斯历转换为公历时,调用方法persianToGregorian(),传入的日期格式为:YYYY-MM-DD,如:
calendarToPersian("2005-08-30");
persianToGregorian("1384-06-08");
- 波斯历和公历的转换
- 公历和阴历转换
- Cocoa公历和中国农历直接的转换
- 关于波斯历(奇怪的历法)
- 公历和农历之间如何转换?
- 公历转换成农历的函数
- 公历转换成农历的函数
- 公历转换农历的算法(JavaScript)
- 公历转换农历的算法(JavaScript)
- 公历转换农历的算法(JavaScript)
- 农历与公历,气节的转换
- C#公历与日本和历之间的转化
- 波斯的棋盘
- 波斯
- PHP汉字拼音转换和公历农历转换
- PHP汉字拼音转换和公历农历转换
- PHP汉字拼音转换和公历农历转换
- Java 儒略历和公历的换算
- Attention - inspect - external cause element and also can affect vision_279
- IBatis架构 实例NPetShop架构分析
- lz文件
- WAMPSERVER+CodeIgniter环境搭建
- WH_CBT Hook将非模态对话框显示为模态对话框
- 波斯历和公历的转换
- STL容器使用该注意的一个问题
- 重新开始vc6/mfc学习——3.定时器、对话框以及菜单的初步使用
- 关于 无知……
- 关闭子窗口,刷新父窗口
- 获取网卡的MAC地址
- 通过注册表获取系统信息
- smarty获取当前时间
- 办个网站就这么难