function INT($d) {
return floor($d);
}
function jdFromDate($dd, $mm, $yy) {
$a = INT((14 - $mm) / 12);
$y = $yy + 4800 - $a;
$m = $mm + 12 * $a - 3;
$jd = $dd + INT((153 * $m + 2) / 5) + 365 * $y + INT($y / 4) - INT($y / 100) + INT($y / 400) - 32045;
if ($jd < 2299161) {
$jd = $dd + INT((153* $m + 2)/5) + 365 * $y + INT($y / 4) - 32083;
}
return $jd;
}
function jdToDate($jd) {
if ($jd > 2299160) { // After 5/10/1582, Gregorian calendar
$a = $jd + 32044;
$b = INT((4*$a+3)/146097);
$c = $a - INT(($b*146097)/4);
} else {
$b = 0;
$c = $jd + 32082;
}
$d = INT((4*$c+3)/1461);
$e = $c - INT((1461*$d)/4);
$m = INT((5*$e+2)/153);
$day = $e - INT((153*$m+2)/5) + 1;
$month = $m + 3 - 12*INT($m/10);
$year = $b*100 + $d - 4800 + INT($m/10);
//echo "day = $day, month = $month, year = $year\n";
return array($day, $month, $year);
}
function getNewMoonDay($k, $timeZone) {
$T = $k/1236.85; // Time in Julian centuries from 1900 January 0.5
$T2 = $T * $T;
$T3 = $T2 * $T;
$dr = M_PI/180;
$Jd1 = 2415020.75933 + 29.53058868*$k + 0.0001178*$T2 - 0.000000155*$T3;
$Jd1 = $Jd1 + 0.00033*sin((166.56 + 132.87*$T - 0.009173*$T2)*$dr); // Mean new moon
$M = 359.2242 + 29.10535608*$k - 0.0000333*$T2 - 0.00000347*$T3; // Sun's mean anomaly
$Mpr = 306.0253 + 385.81691806*$k + 0.0107306*$T2 + 0.00001236*$T3; // Moon's mean anomaly
$F = 21.2964 + 390.67050646*$k - 0.0016528*$T2 - 0.00000239*$T3; // Moon's argument of latitude
$C1=(0.1734 - 0.000393*$T)*sin($M*$dr) + 0.0021*sin(2*$dr*$M);
$C1 = $C1 - 0.4068*sin($Mpr*$dr) + 0.0161*sin($dr*2*$Mpr);
$C1 = $C1 - 0.0004*sin($dr*3*$Mpr);
$C1 = $C1 + 0.0104*sin($dr*2*$F) - 0.0051*sin($dr*($M+$Mpr));
$C1 = $C1 - 0.0074*sin($dr*($M-$Mpr)) + 0.0004*sin($dr*(2*$F+$M));
$C1 = $C1 - 0.0004*sin($dr*(2*$F-$M)) - 0.0006*sin($dr*(2*$F+$Mpr));
$C1 = $C1 + 0.0010*sin($dr*(2*$F-$Mpr)) + 0.0005*sin($dr*(2*$Mpr+$M));
if ($T < -11) {
$deltat= 0.001 + 0.000839*$T + 0.0002261*$T2 - 0.00000845*$T3 - 0.000000081*$T*$T3;
} else {
$deltat= -0.000278 + 0.000265*$T + 0.000262*$T2;
};
$JdNew = $Jd1 + $C1 - $deltat;
//echo "JdNew = $JdNew\n";
return INT($JdNew + 0.5 + $timeZone/24);
}
function getSunLongitude($jdn, $timeZone) {
$T = ($jdn - 2451545.5 - $timeZone/24) / 36525; // Time in Julian centuries from 2000-01-01 12:00:00 GMT
$T2 = $T * $T;
$dr = M_PI/180; // degree to radian
$M = 357.52910 + 35999.05030*$T - 0.0001559*$T2 - 0.00000048*$T*$T2; // mean anomaly, degree
$L0 = 280.46645 + 36000.76983*$T + 0.0003032*$T2; // mean longitude, degree
$DL = (1.914600 - 0.004817*$T - 0.000014*$T2)*sin($dr*$M);
$DL = $DL + (0.019993 - 0.000101*$T)*sin($dr*2*$M) + 0.000290*sin($dr*3*$M);
$L = $L0 + $DL; // true longitude, degree
//echo "\ndr = $dr, M = $M, T = $T, DL = $DL, L = $L, L0 = $L0\n";
$L = $L*$dr;
$L = $L - M_PI*2*(INT($L/(M_PI*2))); // Normalize to (0, 2*PI)
return INT($L/M_PI*6);
}
function getLunarMonth11($yy, $timeZone) {
$off = jdFromDate(31, 12, $yy) - 2415021;
$k = INT($off / 29.530588853);
$nm = getNewMoonDay($k, $timeZone);
$sunLong = getSunLongitude($nm, $timeZone); // sun longitude at local midnight
if ($sunLong >= 9) {
$nm = getNewMoonDay($k-1, $timeZone);
}
return $nm;
}
function getLeapMonthOffset($a11, $timeZone) {
$k = INT(($a11 - 2415021.076998695) / 29.530588853 + 0.5);
$last = 0;
$i = 1; // We start with the month following lunar month 11
$arc = getSunLongitude(getNewMoonDay($k + $i, $timeZone), $timeZone);
do {
$last = $arc;
$i = $i + 1;
$arc = getSunLongitude(getNewMoonDay($k + $i, $timeZone), $timeZone);
} while ($arc != $last && $i < 14);
return $i - 1;
}
// Comvert solar date dd/mm/yyyy to the corresponding lunar date
function convertSolar2Lunar($dd, $mm, $yy, $timeZone) {
$dayNumber = jdFromDate($dd, $mm, $yy);
$k = INT(($dayNumber - 2415021.076998695) / 29.530588853);
$monthStart = getNewMoonDay($k+1, $timeZone);
if ($monthStart > $dayNumber) {
$monthStart = getNewMoonDay($k, $timeZone);
}
$a11 = getLunarMonth11($yy, $timeZone);
$b11 = $a11;
if ($a11 >= $monthStart) {
$lunarYear = $yy;
$a11 = getLunarMonth11($yy-1, $timeZone);
} else {
$lunarYear = $yy+1;
$b11 = getLunarMonth11($yy+1, $timeZone);
}
$lunarDay = $dayNumber - $monthStart + 1;
$diff = INT(($monthStart - $a11)/29);
$lunarLeap = 0;
$lunarMonth = $diff + 11;
if ($b11 - $a11 > 365) {
$leapMonthDiff = getLeapMonthOffset($a11, $timeZone);
if ($diff >= $leapMonthDiff) {
$lunarMonth = $diff + 10;
if ($diff == $leapMonthDiff) {
$lunarLeap = 1;
}
}
}
if ($lunarMonth > 12) {
$lunarMonth = $lunarMonth - 12;
}
if ($lunarMonth >= 11 && $diff < 4) {
$lunarYear -= 1;
}
return array($lunarDay, $lunarMonth, $lunarYear, $lunarLeap);
}
// Convert a lunar date to the corresponding solar date
function convertLunar2Solar($lunarDay, $lunarMonth, $lunarYear, $lunarLeap, $timeZone) {
if ($lunarMonth < 11) {
$a11 = getLunarMonth11($lunarYear-1, $timeZone);
$b11 = getLunarMonth11($lunarYear, $timeZone);
} else {
$a11 = getLunarMonth11($lunarYear, $timeZone);
$b11 = getLunarMonth11($lunarYear+1, $timeZone);
}
$k = INT(0.5 + ($a11 - 2415021.076998695) / 29.530588853);
$off = $lunarMonth - 11;
if ($off < 0) {
$off += 12;
}
if ($b11 - $a11 > 365) {
$leapOff = getLeapMonthOffset($a11, $timeZone);
$leapMonth = $leapOff - 2;
if ($leapMonth < 0) {
$leapMonth += 12;
}
if ($lunarLeap != 0 && $lunarMonth != $leapMonth) {
return array(0, 0, 0);
} else if ($lunarLeap != 0 || $off >= $leapOff) {
$off += 1;
}
}
$monthStart = getNewMoonDay($k + $off, $timeZone);
return jdToDate($monthStart + $lunarDay - 1);
}
function callSolar($lunaryear) {
// $mod = gmp_mod($lunaryear, "10");
$can = $lunaryear % 10;
// $mod1 = gmp_mod($lunaryear, "60");
$chi = $lunaryear % 60;
if ($chi > 12) {
$chi = $chi %12;
}
if ($can == 0) $lunarcan = "Canh";
if ($can == 1) $lunarcan = "Tân";
if ($can == 2) $lunarcan = "Nhâm";
if ($can == 3) $lunarcan = "Quý";
if ($can == 4) $lunarcan = "Giáp";
if ($can == 5) $lunarcan = "Ất";
if ($can == 6) $lunarcan = "Bính";
if ($can == 7) $lunarcan = "Đinh";
if ($can == 8) $lunarcan = "Mậu";
if ($can == 9) $lunarcan = "Kỷ";
if ($chi == 0 || $chi == 12) $lunarchi = "Thân";
if ($chi == 1) $lunarchi = "Dậu";
if ($chi == 2) $lunarchi = "Tuất";
if ($chi == 3) $lunarchi = "Hợi";
if ($chi == 4) $lunarchi = "Tí";
if ($chi == 5) $lunarchi = "Sửu";
if ($chi == 6) $lunarchi = "Dần";
if ($chi == 7) $lunarchi = "Mão";
if ($chi == 8) $lunarchi = "Thìn";
if ($chi == 9) $lunarchi = "Tỵ";
if ($chi == 10) $lunarchi = "Ngọ";
if ($chi == 11) $lunarchi = "Mùi";
$canchi = $lunarcan ." ".$lunarchi;
Return $canchi;
}
function callMonthSolar($lunaryear,$months) {
// $mod = gmp_mod($lunaryear, "10");
$can = ($lunaryear * 12 + $months + 3)%10;
// $mod1 = gmp_mod($lunaryear, "60");
$chi = $months;
if ($can == 0) $lunarcan = "Giáp";
if ($can == 1) $lunarcan = "Ất";
if ($can == 2) $lunarcan = "Bính";
if ($can == 3) $lunarcan = "Đinh";
if ($can == 4) $lunarcan = "Mậu";
if ($can == 5) $lunarcan = "Kỷ";
if ($can == 6) $lunarcan = "Canh";
if ($can == 7) $lunarcan = "Tân";
if ($can == 8) $lunarcan = "Nhâm";
if ($can == 9) $lunarcan = "Quý";
if ($chi == 1) $lunarchi = "Dần";
if ($chi == 2) $lunarchi = "Mão";
if ($chi == 3) $lunarchi = "Thìn";
if ($chi == 4) $lunarchi = "Tỵ";
if ($chi == 5) $lunarchi = "Ngọ";
if ($chi == 6) $lunarchi = "Mùi";
if ($chi == 7) $lunarchi = "Thân";
if ($chi == 8) $lunarchi = "Dậu";
if ($chi == 9) $lunarchi = "Tuất";
if ($chi == 10) $lunarchi = "Hợi";
if ($chi == 11) $lunarchi = "Tý";
if ($chi == 12) $lunarchi = "Sửu";
$canchi = $lunarcan ." ".$lunarchi;
Return $canchi;
}
function Lunar_canchi_date($dd, $mm, $yy) {
$numjd = jdFromDate($dd, $mm, $yy);
$can_date = ($numjd +9) % 10;
$chi_date = ($numjd +1) % 12;
if ($can_date == 0) $lunar_can = "Giáp";
if ($can_date == 1) $lunar_can = "Ất";
if ($can_date == 2) $lunar_can = "Bính";
if ($can_date == 3) $lunar_can = "Đinh";
if ($can_date == 4) $lunar_can = "Mậu";
if ($can_date == 5) $lunar_can = "Kỷ";
if ($can_date == 6) $lunar_can = "Canh";
if ($can_date == 7) $lunar_can = "Tân";
if ($can_date == 8) $lunar_can = "Nhâm";
if ($can_date == 9) $lunar_can = "Quý";
if ($chi_date == 0) $lunar_chi = "Tý";
if ($chi_date == 1) $lunar_chi = "Sửu";
if ($chi_date == 2) $lunar_chi = "Dần";
if ($chi_date == 3) $lunar_chi = "Mão";
if ($chi_date == 4) $lunar_chi = "Thìn";
if ($chi_date == 5) $lunar_chi = "Tỵ";
if ($chi_date == 6) $lunar_chi = "Ngọ";
if ($chi_date == 7) $lunar_chi = "Mùi";
if ($chi_date == 8) $lunar_chi = "Thân";
if ($chi_date == 9) $lunar_chi = "Dậu";
if ($chi_date == 10) $lunar_chi = "Tuất";
if ($chi_date == 11) $lunar_chi = "Hợi";
$canchi_date = $lunar_can ." ".$lunar_chi;
Return $canchi_date;
}
function Ngay_called($dd, $mm, $yy) {
$numjd = jdFromDate($dd, $mm, $yy);
$can_date = ($numjd) % 7;
if ($can_date == 0) $lunar_can = "Thứ 2";
if ($can_date == 1) $lunar_can = "Thứ 3";
if ($can_date == 2) $lunar_can = "Thứ 4";
if ($can_date == 3) $lunar_can = "Thứ 5";
if ($can_date == 4) $lunar_can = "Thứ 6";
if ($can_date == 5) $lunar_can = "Thứ 7";
if ($can_date == 6) $lunar_can = "Chủ nhật";
$canchi_date = $lunar_can;
Return $canchi_date;
}
$al1 = convertSolar2Lunar(date("d"), date("m"), date("Y"), 0, 7.0);
$ngay_cuoi_t[1]="Bính Dần ; Canh Dần ; Đinh Mão ; Kỷ Mão ; Tân Mão ; Bính Tí ; Mậu Tí";
$ngay_cuoi_t[2]="Ất Sửu ; Đinh Sửu ; Kỷ Sửu ; Canh Tí ; Bính Tí ; Mậu Tí : Bính Tuất ; Mậu Tuất ; Canh Tuất";
$ngay_cuoi_t[3]="Ất Sửu ; Đinh Sửu ; Ký Sửu ; Đinh Dậu ; Ất Dậu ; Kỷ Dậu";
$ngay_cuoi_t[4]="Giáp Tí ; Bính Tí ; Mậu Tí ; Giáp Tuất ; Bính Tuất ; Mậu Tuất ; Giáp Thân ; Bính Thân ; Ất Dậu ; Định Dậu";
$ngay_cuoi_t[5]="Quý Dậu ; Ất Dậu ; Giáp Tuất ; Bính Tuất ; Mậu Tuất ; Quí Mùi ; Kỉ Mùi ; Ất Mùi ; Giáp Thân ; Bính Thân";
$ngay_cuoi_t[6]="Nhâm Thân ; Giáp Thân ; Quý Dậu ; Ất Dậu ; Giáp Tuất ; Mậu Tuất ; Nhâm Tuất ; Nhâm Ngọ ; Giáp Ngọ ; Quý Mùi ; Ất Mùi ; Kỷ Mùi";
$ngay_cuoi_t[7]="Quý Tỵ ; Kỷ Tỵ ; Ất Tỵ ; Nhâm Thân ; Giáp Thân ; Quý Dậu ; Ất Dậu ; Nhâm Ngọ ; Giáp Ngọ ; Mậu Ngọ ; Quý Mùi ; Ất Mùi ; Kỷ Mùi";
$ngay_cuoi_t[8]="Mậu Thìn ; Nhâm Thìn ; Kỷ Tỵ ; Tân Tỵ ; Quý Tỵ ; Tân Mùi ; Quý Mùi ; Nhâm Ngọ ; Giáp Ngọ ; Mậu Ngọ ; Giáp Thìn ; Giáp Thân";
$ngay_cuoi_t[9]="Kỷ Tỵ ; Quý Tỵ ; Tân Tỵ ; Canh Ngọ ; Nhâm Ngọ ; Mậu Ngọ ; Tân Mùi ; Quý Mùi ; Kỷ Mùi, Ất Mão ; Quý Mão";
$ngay_cuoi_t[10]="Mậu Thìn ; Canh Thìn ; Nhâm Thìn ; Mậu Ngọ ; Canh Ngọ ; Nhâm Ngọ ; Mậu Dần ; Nhâm Dần ; Canh Dần ; Tân Mão ; Quý Mão ; Kỷ Mão";
$ngay_cuoi_t[11]="Đinh Mão; Kỷ Mão ; Mậu Thìn ; Canh Thìn ; Nhâm Thìn ; Kỷ Tỵ ; Tân Tỵ ; Đinh Tỵ ; Đinh Sửu ; Tân Sửu";
$ngay_cuoi_t[12]="Bính Dần ; Mậu Dần ; Canh Dần ; Đinh Mão ; Kỷ Mão ; Tân Mão ; Mậu Thìn ; Canh Thìn ; Bính Thìn ; Đinh Sửu ; Ất Sửu ; Tân Sửu";
$ngay_ln_t[1]="Đinh Mão ; Bính Tí ; Ất Dậu ; Giáp Ngọ ; Quý Mão ; Nhâm Tí ; Tân Dậu";
$ngay_ln_t[2]="Bính Dần ; Ất Hợi ; Giáp Thân ; Quý Tỵ ; Nhâm Dần ; Tân Hợi ; Canh Thân";
$ngay_ln_t[3]="Ất Sửu ; Giáp Tuất ; Quý Mùi ; Nhâm Thìn ; Tân Sửu ; Canh Tuất ; Kỷ Mùi";
$ngay_ln_t[4]="Đinh Mão ; Bính Tí ; Ất Dậu ; Giáp Ngọ ; Quý Mão ; Nhâm Tí ; Tân Dậu";
$ngay_ln_t[5]="Bính Dần ; Ất Hợi ; Giáp Thân ; Quý Tỵ ; Nhâm Dần ; Tân Hợi ; Canh Thân";
$ngay_ln_t[6]="Ất Sửu ; Giáp Tuất ; Quý Mùi ; Nhâm Thìn ; Tân Sửu ; Canh Tuất ; Kỷ Mùi";
$ngay_ln_t[7]="Đinh Mão ; Bính Tí ; Ất Dậu ; Giáp Ngọ ; Quý Mão ; Nhâm Tí ; Tân Dậu";
$ngay_ln_t[8]="Bính Dần ; Ất Hợi ; Giáp Thân ; Quý Tỵ ; Nhâm Dần ; Tân Hợi ; Canh Thân";
$ngay_ln_t[9]="Ất Sửu ; Giáp Tuất ; Quý Mùi ; Nhâm Thìn ; Tân Sửu ; Canh Tuất ; Kỷ Mùi";
$ngay_ln_t[10]="Đinh Mão ; Bính Tí ; Ất Dậu ; Giáp Ngọ ; Quý Mão ; Nhâm Tí ; Tân Dậu";
$ngay_ln_t[11]="Bính Dần ; Ất Hợi ; Giáp Thân ; Quý Tỵ ; Nhâm Dần ; Tân Hợi ; Canh Thân";
$ngay_ln_t[12]="Ất Sửu ; Giáp Tuất ; Quý Mùi ; Nhâm Thìn ; Tân Sửu ; Canh Tuất ; Kỷ Mùi";
function Datetotietkhi($jd) {
$ph1="";
$tam = trim($jd);
$ngay_thang_tk = array("Vũ Thuỷ","Kinh Trập","Xuân Phân","Thanh Minh","Cốc Vũ","Lập Hạ","Tiểu Mãn","Mang Chủng","Hạ Chí","Tiểu Thử","Đại Thử","Lập Thu","Xử Thử","Bạch Lộ","Thu Phân","Hàn Lộ","Sương Giáng","Lập Đông","Tiểu Tuyết","Đại Tuyết","Đông chí","Tiểu Hàn","Đại Hàn","Lập Xuân");
$ngay_thang_tk1 = array("雨水","驚蟄(惊蛰)","春分","清明","穀雨(谷雨)","立夏","小滿(小满)","芒種(芒种)","夏至","小暑","大暑","立秋","處暑(处暑)","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至","小寒","大寒","立春");
for($i=0;$i<25;$i++){
if ($tam==$ngay_thang_tk[$i]){
$ph1 = $ngay_thang_tk1[$i];
}
}
return $ph1;
}
function DatetoCanChi($jd) {
$ph="";
$tam = explode(" ",$jd);
$can_ng = array("Giáp","Ất","Bính","Đinh","Mậu","Kỷ","Canh","Tân","Nhâm","Quý");
$can_ng1 = array("甲","乙","丙","丁","戊","己","更","辛","壬","癸");
$chi_ng = array("Tí","Sửu","Dần","Mão","Thìn","Tỵ","Ngọ","Mùi","Thân","Dậu","Tuất","Hợi");
$chi_ng1 = array("子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥");
for($i=0;$i<10;$i++){
if ($tam[0]==$can_ng[$i]){
$ph = $can_ng1[$i];
}
}
for($i=0;$i<12;$i++){
if ($tam[1]==$chi_ng[$i]){
$ph .= $chi_ng1[$i];
}
}
return $ph;
}
if (isset($thang)){
$thang_kt = $thang;
}else{
$thang_kt = intval(date("m"));
}
if (isset($nam)){
$nam_kt = $nam;
}else{
$nam_kt = date("Y");
}
print '
'.locStr("PerpetualCalendar").'
'; echo ''; ?>