}
/**********************************************************
函数名称: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)
{
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.getFullYear();
var month = current.getMonth()+1;
var day = current.getDate();
var datetimevalue = JULIAN_EPOCH_MILLIS + julianDay * ONE_DAY_MILLIS + mod(new Date(year,month,day,8,1,1) - JULIAN_EPOCH_MILLIS, ONE_DAY_MILLIS);
current = new Date(datetimevalue);
var julianDate = new Object();
julianDate.year = current.getFullYear();
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);
/**********************************************************
函数名称: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)
{
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.getFullYear();
var month = current.getMonth()+1;
var day = current.getDate();
var datetimevalue = JULIAN_EPOCH_MILLIS + julianDay * ONE_DAY_MILLIS + mod(new Date(year,month,day,8,1,1) - JULIAN_EPOCH_MILLIS, ONE_DAY_MILLIS);
current = new Date(datetimevalue);
var julianDate = new Object();
julianDate.year = current.getFullYear();
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);