/*਀ ⨀ 䌀漀瀀礀爀椀最栀琀 ⠀挀⤀ ㈀　　㘀 䠀漀 一最漀挀 䐀甀挀⸀ 䄀氀氀 刀椀最栀琀猀 刀攀猀攀爀瘀攀搀⸀ 
 * Astronomical algorithms from the book "Astronomical Algorithms" by Jean Meeus, 1998਀ ⨀ 
 * Permission to use, copy, modify, and redistribute this software and its਀ ⨀ 搀漀挀甀洀攀渀琀愀琀椀漀渀 昀漀爀 瀀攀爀猀漀渀愀氀Ⰰ 渀漀渀ⴀ挀漀洀洀攀爀挀椀愀氀 甀猀攀 椀猀 栀攀爀攀戀礀 最爀愀渀琀攀搀 瀀爀漀瘀椀搀攀搀 琀栀愀琀 
 * this copyright notice and appropriate documentation appears in all copies.਀ ⨀⼀ 
var PI = Math.PI;਀ 
/* Discard the fractional part of a number, e.g., INT(3.2) = 3 */਀昀甀渀挀琀椀漀渀 䤀一吀⠀搀⤀ 笀 
	return Math.floor(d);਀紀 
਀⼀⨀ 䌀漀洀瀀甀琀攀 琀栀攀 ⠀椀渀琀攀最爀愀氀⤀ 䨀甀氀椀愀渀 搀愀礀 渀甀洀戀攀爀 漀昀 搀愀礀 搀搀⼀洀洀⼀礀礀礀礀Ⰰ 椀⸀攀⸀Ⰰ 琀栀攀 渀甀洀戀攀爀  
 * of days between 1/1/4713 BC (Julian calendar) and dd/mm/yyyy. ਀ ⨀ 䘀漀爀洀甀氀愀 昀爀漀洀 栀琀琀瀀㨀⼀⼀眀眀眀⸀琀漀渀搀攀爀椀渀最⸀搀欀⼀挀氀愀甀猀⼀挀愀氀攀渀搀愀爀⸀栀琀洀氀 
 */਀昀甀渀挀琀椀漀渀 樀搀䘀爀漀洀䐀愀琀攀⠀搀搀Ⰰ 洀洀Ⰰ 礀礀⤀ 笀 
	var a, y, m, jd;਀ऀ愀 㴀 䤀一吀⠀⠀㄀㐀 ⴀ 洀洀⤀ ⼀ ㄀㈀⤀㬀 
	y = yy+4800-a;਀ऀ洀 㴀 洀洀⬀㄀㈀⨀愀ⴀ㌀㬀 
	jd = dd + INT((153*m+2)/5) + 365*y + INT(y/4) - INT(y/100) + INT(y/400) - 32045;਀ऀ椀昀 ⠀樀搀 㰀 ㈀㈀㤀㤀㄀㘀㄀⤀ 笀 
		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਀ऀऀ愀 㴀 樀搀 ⬀ ㌀㈀　㐀㐀㬀 
		b = INT((4*a+3)/146097);਀ऀऀ挀 㴀 愀 ⴀ 䤀一吀⠀⠀戀⨀㄀㐀㘀　㤀㜀⤀⼀㐀⤀㬀 
	} else {਀ऀऀ戀 㴀 　㬀 
		c = jd + 32082;਀ऀ紀 
	d = INT((4*c+3)/1461);਀ऀ攀 㴀 挀 ⴀ 䤀一吀⠀⠀㄀㐀㘀㄀⨀搀⤀⼀㐀⤀㬀 
	m = INT((5*e+2)/153);਀ऀ搀愀礀 㴀 攀 ⴀ 䤀一吀⠀⠀㄀㔀㌀⨀洀⬀㈀⤀⼀㔀⤀ ⬀ ㄀㬀 
	month = m + 3 - 12*INT(m/10);਀ऀ礀攀愀爀 㴀 戀⨀㄀　　 ⬀ 搀 ⴀ 㐀㠀　　 ⬀ 䤀一吀⠀洀⼀㄀　⤀㬀 
	s = "Ngày " + day + " tháng " + month + " năm " + year਀ 
	return s;਀紀 
਀⼀⨀ 䌀漀洀瀀甀琀攀 琀栀攀 琀椀洀攀 漀昀 琀栀攀 欀ⴀ琀栀 渀攀眀 洀漀漀渀 愀昀琀攀爀 琀栀攀 渀攀眀 洀漀漀渀 漀昀 ㄀⼀㄀⼀㄀㤀　　 ㄀㌀㨀㔀㈀ 唀䌀吀  
 * (measured as the number of days since 1/1/4713 BC noon UCT, e.g., 2451545.125 is 1/1/2000 15:00 UTC).਀ ⨀ 刀攀琀甀爀渀猀 愀 昀氀漀愀琀椀渀最 渀甀洀戀攀爀Ⰰ 攀⸀最⸀Ⰰ ㈀㐀㄀㔀　㜀㤀⸀㤀㜀㔀㠀㘀㄀㜀㠀㄀㌀ 昀漀爀 欀㴀㈀ 漀爀 ㈀㐀㄀㐀㤀㘀㄀⸀㤀㌀㔀㄀㔀㜀㜀㐀㘀 昀漀爀 欀㴀ⴀ㈀ 
 * Algorithm from: "Astronomical Algorithms" by Jean Meeus, 1998਀ ⨀⼀ 
function NewMoon(k) {਀ऀ瘀愀爀 吀Ⰰ 吀㈀Ⰰ 吀㌀Ⰰ 搀爀Ⰰ 䨀搀㄀Ⰰ 䴀Ⰰ 䴀瀀爀Ⰰ 䘀Ⰰ 䌀㄀Ⰰ 搀攀氀琀愀琀Ⰰ 䨀搀一攀眀㬀 
	T = k/1236.85; // Time in Julian centuries from 1900 January 0.5਀ऀ吀㈀ 㴀 吀 ⨀ 吀㬀 
	T3 = T2 * T;਀ऀ搀爀 㴀 倀䤀⼀㄀㠀　㬀 
	Jd1 = 2415020.75933 + 29.53058868*k + 0.0001178*T2 - 0.000000155*T3;਀ऀ䨀搀㄀ 㴀 䨀搀㄀ ⬀ 　⸀　　　㌀㌀⨀䴀愀琀栀⸀猀椀渀⠀⠀㄀㘀㘀⸀㔀㘀 ⬀ ㄀㌀㈀⸀㠀㜀⨀吀 ⴀ 　⸀　　㤀㄀㜀㌀⨀吀㈀⤀⨀搀爀⤀㬀 ⼀⼀ 䴀攀愀渀 渀攀眀 洀漀漀渀 
	M = 359.2242 + 29.10535608*k - 0.0000333*T2 - 0.00000347*T3; // Sun's mean anomaly਀ऀ䴀瀀爀 㴀 ㌀　㘀⸀　㈀㔀㌀ ⬀ ㌀㠀㔀⸀㠀㄀㘀㤀㄀㠀　㘀⨀欀 ⬀ 　⸀　㄀　㜀㌀　㘀⨀吀㈀ ⬀ 　⸀　　　　㄀㈀㌀㘀⨀吀㌀㬀 ⼀⼀ 䴀漀漀渀✀猀 洀攀愀渀 愀渀漀洀愀氀礀 
	F = 21.2964 + 390.67050646*k - 0.0016528*T2 - 0.00000239*T3; // Moon's argument of latitude਀ऀ䌀㄀㴀⠀　⸀㄀㜀㌀㐀 ⴀ 　⸀　　　㌀㤀㌀⨀吀⤀⨀䴀愀琀栀⸀猀椀渀⠀䴀⨀搀爀⤀ ⬀ 　⸀　　㈀㄀⨀䴀愀琀栀⸀猀椀渀⠀㈀⨀搀爀⨀䴀⤀㬀 
	C1 = C1 - 0.4068*Math.sin(Mpr*dr) + 0.0161*Math.sin(dr*2*Mpr);਀ऀ䌀㄀ 㴀 䌀㄀ ⴀ 　⸀　　　㐀⨀䴀愀琀栀⸀猀椀渀⠀搀爀⨀㌀⨀䴀瀀爀⤀㬀 
	C1 = C1 + 0.0104*Math.sin(dr*2*F) - 0.0051*Math.sin(dr*(M+Mpr));਀ऀ䌀㄀ 㴀 䌀㄀ ⴀ 　⸀　　㜀㐀⨀䴀愀琀栀⸀猀椀渀⠀搀爀⨀⠀䴀ⴀ䴀瀀爀⤀⤀ ⬀ 　⸀　　　㐀⨀䴀愀琀栀⸀猀椀渀⠀搀爀⨀⠀㈀⨀䘀⬀䴀⤀⤀㬀 
	C1 = C1 - 0.0004*Math.sin(dr*(2*F-M)) - 0.0006*Math.sin(dr*(2*F+Mpr));਀ऀ䌀㄀ 㴀 䌀㄀ ⬀ 　⸀　　㄀　⨀䴀愀琀栀⸀猀椀渀⠀搀爀⨀⠀㈀⨀䘀ⴀ䴀瀀爀⤀⤀ ⬀ 　⸀　　　㔀⨀䴀愀琀栀⸀猀椀渀⠀搀爀⨀⠀㈀⨀䴀瀀爀⬀䴀⤀⤀㬀 
	if (T < -11) {਀ऀऀ搀攀氀琀愀琀㴀 　⸀　　㄀ ⬀ 　⸀　　　㠀㌀㤀⨀吀 ⬀ 　⸀　　　㈀㈀㘀㄀⨀吀㈀ ⴀ 　⸀　　　　　㠀㐀㔀⨀吀㌀ ⴀ 　⸀　　　　　　　㠀㄀⨀吀⨀吀㌀㬀 
	} else {਀ऀऀ搀攀氀琀愀琀㴀 ⴀ　⸀　　　㈀㜀㠀 ⬀ 　⸀　　　㈀㘀㔀⨀吀 ⬀ 　⸀　　　㈀㘀㈀⨀吀㈀㬀 
	};਀ऀ䨀搀一攀眀 㴀 䨀搀㄀ ⬀ 䌀㄀ ⴀ 搀攀氀琀愀琀㬀 
	return JdNew;਀紀 
਀⼀⨀ 䌀漀洀瀀甀琀攀 琀栀攀 氀漀渀最椀琀甀搀攀 漀昀 琀栀攀 猀甀渀 愀琀 愀渀礀 琀椀洀攀⸀  
 * Parameter: floating number jdn, the number of days since 1/1/4713 BC noon਀ ⨀ 䄀氀最漀爀椀琀栀洀 昀爀漀洀㨀 ∀䄀猀琀爀漀渀漀洀椀挀愀氀 䄀氀最漀爀椀琀栀洀猀∀ 戀礀 䨀攀愀渀 䴀攀攀甀猀Ⰰ ㄀㤀㤀㠀 
 */਀昀甀渀挀琀椀漀渀 匀甀渀䰀漀渀最椀琀甀搀攀⠀樀搀渀⤀ 笀 
	var T, T2, dr, M, L0, DL, L;਀ऀ吀 㴀 ⠀樀搀渀 ⴀ ㈀㐀㔀㄀㔀㐀㔀⸀　 ⤀ ⼀ ㌀㘀㔀㈀㔀㬀 ⼀⼀ 吀椀洀攀 椀渀 䨀甀氀椀愀渀 挀攀渀琀甀爀椀攀猀 昀爀漀洀 ㈀　　　ⴀ　㄀ⴀ　㄀ ㄀㈀㨀　　㨀　　 䜀䴀吀 
	T2 = T*T;਀ऀ搀爀 㴀 倀䤀⼀㄀㠀　㬀 ⼀⼀ 搀攀最爀攀攀 琀漀 爀愀搀椀愀渀 
	M = 357.52910 + 35999.05030*T - 0.0001559*T2 - 0.00000048*T*T2; // mean anomaly, degree਀ऀ䰀　 㴀 ㈀㠀　⸀㐀㘀㘀㐀㔀 ⬀ ㌀㘀　　　⸀㜀㘀㤀㠀㌀⨀吀 ⬀ 　⸀　　　㌀　㌀㈀⨀吀㈀㬀 ⼀⼀ 洀攀愀渀 氀漀渀最椀琀甀搀攀Ⰰ 搀攀最爀攀攀 
	DL = (1.914600 - 0.004817*T - 0.000014*T2)*Math.sin(dr*M);਀ऀ䐀䰀 㴀 䐀䰀 ⬀ ⠀　⸀　㄀㤀㤀㤀㌀ ⴀ 　⸀　　　㄀　㄀⨀吀⤀⨀䴀愀琀栀⸀猀椀渀⠀搀爀⨀㈀⨀䴀⤀ ⬀ 　⸀　　　㈀㤀　⨀䴀愀琀栀⸀猀椀渀⠀搀爀⨀㌀⨀䴀⤀㬀 
	L = L0 + DL; // true longitude, degree਀ऀ䰀 㴀 䰀⨀搀爀㬀 
	L = L - PI*2*(INT(L/(PI*2))); // Normalize to (0, 2*PI)਀ऀ爀攀琀甀爀渀 䰀㬀 
}਀ 
/* Compute sun position at midnight of the day with the given Julian day number. ਀ ⨀ 吀栀攀 琀椀洀攀 稀漀渀攀 椀昀 琀栀攀 琀椀洀攀 搀椀昀昀攀爀攀渀挀攀 戀攀琀眀攀攀渀 氀漀挀愀氀 琀椀洀攀 愀渀搀 唀吀䌀㨀 㜀⸀　 昀漀爀 唀吀䌀⬀㜀㨀　　⸀ 
 * The function returns a number between 0 and 11. ਀ ⨀ 䘀爀漀洀 琀栀攀 搀愀礀 愀昀琀攀爀 䴀愀爀挀栀 攀焀甀椀渀漀砀 愀渀搀 琀栀攀 ㄀猀琀 洀愀樀漀爀 琀攀爀洀 愀昀琀攀爀 䴀愀爀挀栀 攀焀甀椀渀漀砀Ⰰ 　 椀猀 爀攀琀甀爀渀攀搀⸀  
 * After that, return 1, 2, 3 ... ਀ ⨀⼀ 
function getSunLongitude(dayNumber, timeZone) {਀ऀ爀攀琀甀爀渀 䤀一吀⠀匀甀渀䰀漀渀最椀琀甀搀攀⠀搀愀礀一甀洀戀攀爀 ⴀ 　⸀㔀 ⴀ 琀椀洀攀娀漀渀攀⼀㈀㐀⤀⼀倀䤀⨀㘀⤀㬀 
}਀ 
/* Compute the day of the k-th new moon in the given time zone.਀ ⨀ 吀栀攀 琀椀洀攀 稀漀渀攀 椀昀 琀栀攀 琀椀洀攀 搀椀昀昀攀爀攀渀挀攀 戀攀琀眀攀攀渀 氀漀挀愀氀 琀椀洀攀 愀渀搀 唀吀䌀㨀 㜀⸀　 昀漀爀 唀吀䌀⬀㜀㨀　　 
 */਀昀甀渀挀琀椀漀渀 最攀琀一攀眀䴀漀漀渀䐀愀礀⠀欀Ⰰ 琀椀洀攀娀漀渀攀⤀ 笀 
	return INT(NewMoon(k) + 0.5 + timeZone/24);਀紀 
਀⼀⨀ 䘀椀渀搀 琀栀攀 搀愀礀 琀栀愀琀 猀琀愀爀琀猀 琀栀攀 氀甀渀攀爀 洀漀渀琀栀 ㄀㄀ 漀昀 琀栀攀 最椀瘀攀渀 礀攀愀爀 昀漀爀 琀栀攀 最椀瘀攀渀 琀椀洀攀 稀漀渀攀 ⨀⼀ 
function getLunarMonth11(yy, timeZone) {਀ऀ瘀愀爀 欀Ⰰ 漀昀昀Ⰰ 渀洀Ⰰ 猀甀渀䰀漀渀最㬀 
	//off = jdFromDate(31, 12, yy) - 2415021.076998695;਀ऀ漀昀昀 㴀 樀搀䘀爀漀洀䐀愀琀攀⠀㌀㄀Ⰰ ㄀㈀Ⰰ 礀礀⤀ ⴀ ㈀㐀㄀㔀　㈀㄀㬀 
	k = INT(off / 29.530588853);਀ऀ渀洀 㴀 最攀琀一攀眀䴀漀漀渀䐀愀礀⠀欀Ⰰ 琀椀洀攀娀漀渀攀⤀㬀 
	sunLong = getSunLongitude(nm, timeZone); // sun longitude at local midnight਀ऀ椀昀 ⠀猀甀渀䰀漀渀最 㸀㴀 㤀⤀ 笀 
		nm = getNewMoonDay(k-1, timeZone);਀ऀ紀 
	return nm;਀紀 
਀⼀⨀ 䘀椀渀搀 琀栀攀 椀渀搀攀砀 漀昀 琀栀攀 氀攀愀瀀 洀漀渀琀栀 愀昀琀攀爀 琀栀攀 洀漀渀琀栀 猀琀愀爀琀椀渀最 漀渀 琀栀攀 搀愀礀 愀㄀㄀⸀ ⨀⼀ 
function getLeapMonthOffset(a11, timeZone) {਀ऀ瘀愀爀 欀Ⰰ 氀愀猀琀Ⰰ 愀爀挀Ⰰ 椀㬀 
	k = INT((a11 - 2415021.076998695) / 29.530588853 + 0.5);਀ऀ氀愀猀琀 㴀 　㬀 
	i = 1; // We start with the month following lunar month 11਀ऀ愀爀挀 㴀 最攀琀匀甀渀䰀漀渀最椀琀甀搀攀⠀最攀琀一攀眀䴀漀漀渀䐀愀礀⠀欀⬀椀Ⰰ 琀椀洀攀娀漀渀攀⤀Ⰰ 琀椀洀攀娀漀渀攀⤀㬀 
	do {਀ऀऀ氀愀猀琀 㴀 愀爀挀㬀 
		i++;਀ऀऀ愀爀挀 㴀 最攀琀匀甀渀䰀漀渀最椀琀甀搀攀⠀最攀琀一攀眀䴀漀漀渀䐀愀礀⠀欀⬀椀Ⰰ 琀椀洀攀娀漀渀攀⤀Ⰰ 琀椀洀攀娀漀渀攀⤀㬀 
	} while (arc != last && i < 14);਀ऀ爀攀琀甀爀渀 椀ⴀ㄀㬀 
}਀ 
/* Comvert solar date dd/mm/yyyy to the corresponding lunar date */਀昀甀渀挀琀椀漀渀 挀漀渀瘀攀爀琀匀漀氀愀爀㈀䰀甀渀愀爀⠀搀搀Ⰰ 洀洀Ⰰ 礀礀Ⰰ 琀椀洀攀娀漀渀攀⤀ 笀 
	var k, dayNumber, monthStart, a11, b11, lunarDay, lunarMonth, lunarYear, lunarLeap;਀ऀ搀愀礀一甀洀戀攀爀 㴀 樀搀䘀爀漀洀䐀愀琀攀⠀搀搀Ⰰ 洀洀Ⰰ 礀礀⤀㬀 
	k = INT((dayNumber - 2415021.076998695) / 29.530588853);਀ऀ洀漀渀琀栀匀琀愀爀琀 㴀 最攀琀一攀眀䴀漀漀渀䐀愀礀⠀欀⬀㄀Ⰰ 琀椀洀攀娀漀渀攀⤀㬀 
	if (monthStart > dayNumber) {਀ऀऀ洀漀渀琀栀匀琀愀爀琀 㴀 最攀琀一攀眀䴀漀漀渀䐀愀礀⠀欀Ⰰ 琀椀洀攀娀漀渀攀⤀㬀 
	}਀ऀ⼀⼀愀氀攀爀琀⠀搀愀礀一甀洀戀攀爀⬀∀ ⴀ㸀 ∀⬀洀漀渀琀栀匀琀愀爀琀⤀㬀 
	a11 = getLunarMonth11(yy, timeZone);਀ऀ戀㄀㄀ 㴀 愀㄀㄀㬀 
	if (a11 >= monthStart) {਀ऀऀ氀甀渀愀爀夀攀愀爀 㴀 礀礀㬀 
		a11 = getLunarMonth11(yy-1, timeZone);਀ऀ紀 攀氀猀攀 笀 
		lunarYear = yy+1;਀ऀऀ戀㄀㄀ 㴀 最攀琀䰀甀渀愀爀䴀漀渀琀栀㄀㄀⠀礀礀⬀㄀Ⰰ 琀椀洀攀娀漀渀攀⤀㬀 
	}਀ऀ氀甀渀愀爀䐀愀礀 㴀 搀愀礀一甀洀戀攀爀ⴀ洀漀渀琀栀匀琀愀爀琀⬀㄀㬀 
	diff = INT((monthStart - a11)/29);਀ऀ氀甀渀愀爀䰀攀愀瀀 㴀 　㬀 
	lunarMonth = diff+11;਀ऀ椀昀 ⠀戀㄀㄀ ⴀ 愀㄀㄀ 㸀 ㌀㘀㔀⤀ 笀 
		leapMonthDiff = getLeapMonthOffset(a11, timeZone);਀ऀऀ椀昀 ⠀搀椀昀昀 㸀㴀 氀攀愀瀀䴀漀渀琀栀䐀椀昀昀⤀ 笀 
			lunarMonth = diff + 10;਀ऀऀऀ椀昀 ⠀搀椀昀昀 㴀㴀 氀攀愀瀀䴀漀渀琀栀䐀椀昀昀⤀ 笀 
				lunarLeap = 1;਀ऀऀऀ紀 
		}਀ऀ紀 
	if (lunarMonth > 12) {਀ऀऀ氀甀渀愀爀䴀漀渀琀栀 㴀 氀甀渀愀爀䴀漀渀琀栀 ⴀ ㄀㈀㬀 
	}਀ऀ椀昀 ⠀氀甀渀愀爀䴀漀渀琀栀 㸀㴀 ㄀㄀ ☀☀ 搀椀昀昀 㰀 㐀⤀ 笀 
		lunarYear -= 1;਀ऀ紀 
	s = "Ngày " + lunarDay + " tháng " + lunarMonth + " năm " + lunarYear਀ 
	return s;਀ 
}਀ 
਀⼀⨀ 䌀漀洀瘀攀爀琀 猀漀氀愀爀 搀愀琀攀 搀搀⼀洀洀⼀礀礀礀礀 琀漀 琀栀攀 挀漀爀爀攀猀瀀漀渀搀椀渀最 氀甀渀愀爀 搀愀琀攀 ⨀⼀ 
function convertSolar2Lunar2(dd, mm, yy, timeZone) {਀ऀ瘀愀爀 欀Ⰰ 搀愀礀一甀洀戀攀爀Ⰰ 洀漀渀琀栀匀琀愀爀琀Ⰰ 愀㄀㄀Ⰰ 戀㄀㄀Ⰰ 氀甀渀愀爀䐀愀礀Ⰰ 氀甀渀愀爀䴀漀渀琀栀Ⰰ 氀甀渀愀爀夀攀愀爀Ⰰ 氀甀渀愀爀䰀攀愀瀀㬀 
	dayNumber = jdFromDate(dd, mm, yy);਀ऀ欀 㴀 䤀一吀⠀⠀搀愀礀一甀洀戀攀爀 ⴀ ㈀㐀㄀㔀　㈀㄀⸀　㜀㘀㤀㤀㠀㘀㤀㔀⤀ ⼀ ㈀㤀⸀㔀㌀　㔀㠀㠀㠀㔀㌀⤀㬀 
	monthStart = getNewMoonDay(k+1, timeZone);਀ऀ椀昀 ⠀洀漀渀琀栀匀琀愀爀琀 㸀 搀愀礀一甀洀戀攀爀⤀ 笀 
		monthStart = getNewMoonDay(k, timeZone);਀ऀ紀 
	//alert(dayNumber+" -> "+monthStart);਀ऀ愀㄀㄀ 㴀 最攀琀䰀甀渀愀爀䴀漀渀琀栀㄀㄀⠀礀礀Ⰰ 琀椀洀攀娀漀渀攀⤀㬀 
	b11 = a11;਀ऀ椀昀 ⠀愀㄀㄀ 㸀㴀 洀漀渀琀栀匀琀愀爀琀⤀ 笀 
		lunarYear = yy;਀ऀऀ愀㄀㄀ 㴀 最攀琀䰀甀渀愀爀䴀漀渀琀栀㄀㄀⠀礀礀ⴀ㄀Ⰰ 琀椀洀攀娀漀渀攀⤀㬀 
	} else {਀ऀऀ氀甀渀愀爀夀攀愀爀 㴀 礀礀⬀㄀㬀 
		b11 = getLunarMonth11(yy+1, timeZone);਀ऀ紀 
	lunarDay = dayNumber-monthStart+1;਀ऀ搀椀昀昀 㴀 䤀一吀⠀⠀洀漀渀琀栀匀琀愀爀琀 ⴀ 愀㄀㄀⤀⼀㈀㤀⤀㬀 
	lunarLeap = 0;਀ऀ氀甀渀愀爀䴀漀渀琀栀 㴀 搀椀昀昀⬀㄀㄀㬀 
	if (b11 - a11 > 365) {਀ऀऀ氀攀愀瀀䴀漀渀琀栀䐀椀昀昀 㴀 最攀琀䰀攀愀瀀䴀漀渀琀栀伀昀昀猀攀琀⠀愀㄀㄀Ⰰ 琀椀洀攀娀漀渀攀⤀㬀 
		if (diff >= leapMonthDiff) {਀ऀऀऀ氀甀渀愀爀䴀漀渀琀栀 㴀 搀椀昀昀 ⬀ ㄀　㬀 
			if (diff == leapMonthDiff) {਀ऀऀऀऀ氀甀渀愀爀䰀攀愀瀀 㴀 ㄀㬀 
			}਀ऀऀ紀 
	}਀ऀ椀昀 ⠀氀甀渀愀爀䴀漀渀琀栀 㸀 ㄀㈀⤀ 笀 
		lunarMonth = lunarMonth - 12;਀ऀ紀 
	if (lunarMonth >= 11 && diff < 4) {਀ऀऀ氀甀渀愀爀夀攀愀爀 ⴀ㴀 ㄀㬀 
	}਀ऀ猀 㴀 氀甀渀愀爀䐀愀礀 ⬀ ∀⼀∀ ⬀ 氀甀渀愀爀䴀漀渀琀栀 ⬀ ∀⼀∀ ⬀ 氀甀渀愀爀夀攀愀爀 
਀ऀ爀攀琀甀爀渀 猀㬀 
਀紀 
਀ 
/* Convert a lunar date to the corresponding solar date */਀昀甀渀挀琀椀漀渀 挀漀渀瘀攀爀琀䰀甀渀愀爀㈀匀漀氀愀爀⠀氀甀渀愀爀䐀愀礀Ⰰ 氀甀渀愀爀䴀漀渀琀栀Ⰰ 氀甀渀愀爀夀攀愀爀Ⰰ 氀甀渀愀爀䰀攀愀瀀Ⰰ 琀椀洀攀娀漀渀攀⤀ 笀 
	var k, a11, b11, off, leapOff, leapMonth, monthStart;਀ऀ椀昀 ⠀氀甀渀愀爀䴀漀渀琀栀 㰀 ㄀㄀⤀ 笀 
		a11 = getLunarMonth11(lunarYear-1, timeZone);਀ऀऀ戀㄀㄀ 㴀 最攀琀䰀甀渀愀爀䴀漀渀琀栀㄀㄀⠀氀甀渀愀爀夀攀愀爀Ⰰ 琀椀洀攀娀漀渀攀⤀㬀 
	} else {਀ऀऀ愀㄀㄀ 㴀 最攀琀䰀甀渀愀爀䴀漀渀琀栀㄀㄀⠀氀甀渀愀爀夀攀愀爀Ⰰ 琀椀洀攀娀漀渀攀⤀㬀 
		b11 = getLunarMonth11(lunarYear+1, timeZone);਀ऀ紀 
	k = INT(0.5 + (a11 - 2415021.076998695) / 29.530588853);਀ऀ漀昀昀 㴀 氀甀渀愀爀䴀漀渀琀栀 ⴀ ㄀㄀㬀 
	if (off < 0) {਀ऀऀ漀昀昀 ⬀㴀 ㄀㈀㬀 
	}਀ऀ椀昀 ⠀戀㄀㄀ ⴀ 愀㄀㄀ 㸀 ㌀㘀㔀⤀ 笀 
		leapOff = getLeapMonthOffset(a11, timeZone);਀ऀऀ氀攀愀瀀䴀漀渀琀栀 㴀 氀攀愀瀀伀昀昀 ⴀ ㈀㬀 
		if (leapMonth < 0) {਀ऀऀऀ氀攀愀瀀䴀漀渀琀栀 ⬀㴀 ㄀㈀㬀 
		}਀ऀऀ椀昀 ⠀氀甀渀愀爀䰀攀愀瀀 ℀㴀 　 ☀☀ 氀甀渀愀爀䴀漀渀琀栀 ℀㴀 氀攀愀瀀䴀漀渀琀栀⤀ 笀 
			return new Array(0, 0, 0);਀ऀऀ紀 攀氀猀攀 椀昀 ⠀氀甀渀愀爀䰀攀愀瀀 ℀㴀 　 簀簀 漀昀昀 㸀㴀 氀攀愀瀀伀昀昀⤀ 笀 
			off += 1;਀ऀऀ紀 
	}਀ऀ洀漀渀琀栀匀琀愀爀琀 㴀 最攀琀一攀眀䴀漀漀渀䐀愀礀⠀欀⬀漀昀昀Ⰰ 琀椀洀攀娀漀渀攀⤀㬀 
	return jdToDate(monthStart+lunarDay-1);਀紀 
਀ 
਀昀甀渀挀琀椀漀渀 琀栀愀渀最搀氀⠀氀甀渀愀爀䐀愀礀Ⰰ 氀甀渀愀爀䴀漀渀琀栀Ⰰ 氀甀渀愀爀夀攀愀爀Ⰰ 氀甀渀愀爀䰀攀愀瀀Ⰰ 琀椀洀攀娀漀渀攀⤀ 笀 
	var k, a11, b11, off, leapOff, leapMonth, monthStart;਀ऀ椀昀 ⠀氀甀渀愀爀䴀漀渀琀栀 㰀 ㄀㄀⤀ 笀 
		a11 = getLunarMonth11(lunarYear-1, timeZone);਀ऀऀ戀㄀㄀ 㴀 最攀琀䰀甀渀愀爀䴀漀渀琀栀㄀㄀⠀氀甀渀愀爀夀攀愀爀Ⰰ 琀椀洀攀娀漀渀攀⤀㬀 
	} else {਀ऀऀ愀㄀㄀ 㴀 最攀琀䰀甀渀愀爀䴀漀渀琀栀㄀㄀⠀氀甀渀愀爀夀攀愀爀Ⰰ 琀椀洀攀娀漀渀攀⤀㬀 
		b11 = getLunarMonth11(lunarYear+1, timeZone);਀ऀ紀 
	k = INT(0.5 + (a11 - 2415021.076998695) / 29.530588853);਀ऀ漀昀昀 㴀 氀甀渀愀爀䴀漀渀琀栀 ⴀ ㄀㄀㬀 
	if (off < 0) {਀ऀऀ漀昀昀 ⬀㴀 ㄀㈀㬀 
	}਀ऀ椀昀 ⠀戀㄀㄀ ⴀ 愀㄀㄀ 㸀 ㌀㘀㔀⤀ 笀 
		leapOff = getLeapMonthOffset(a11, timeZone);਀ऀऀ氀攀愀瀀䴀漀渀琀栀 㴀 氀攀愀瀀伀昀昀 ⴀ ㈀㬀 
		if (leapMonth < 0) {਀ऀऀऀ氀攀愀瀀䴀漀渀琀栀 ⬀㴀 ㄀㈀㬀 
		}਀ऀऀ椀昀 ⠀氀甀渀愀爀䰀攀愀瀀 ℀㴀 　 ☀☀ 氀甀渀愀爀䴀漀渀琀栀 ℀㴀 氀攀愀瀀䴀漀渀琀栀⤀ 笀 
			return new Array(0, 0, 0);਀ऀऀ紀 攀氀猀攀 椀昀 ⠀氀甀渀愀爀䰀攀愀瀀 ℀㴀 　 簀簀 漀昀昀 㸀㴀 氀攀愀瀀伀昀昀⤀ 笀 
			off += 1;਀ऀऀ紀 
	}਀ऀ洀漀渀琀栀匀琀愀爀琀 㴀 最攀琀一攀眀䴀漀漀渀䐀愀礀⠀欀⬀漀昀昀Ⰰ 琀椀洀攀娀漀渀攀⤀㬀 
	jd = monthStart+lunarDay-1;਀ऀ椀昀 ⠀樀搀 㸀 ㈀㈀㤀㤀㄀㘀　⤀ 笀 ⼀⼀ 䄀昀琀攀爀 㔀⼀㄀　⼀㄀㔀㠀㈀Ⰰ 䜀爀攀最漀爀椀愀渀 挀愀氀攀渀搀愀爀 
		a = jd + 32044;਀ऀऀ戀 㴀 䤀一吀⠀⠀㐀⨀愀⬀㌀⤀⼀㄀㐀㘀　㤀㜀⤀㬀 
		c = a - INT((b*146097)/4);਀ऀ紀 攀氀猀攀 笀 
		b = 0;਀ऀऀ挀 㴀 樀搀 ⬀ ㌀㈀　㠀㈀㬀 
	}਀ऀ搀 㴀 䤀一吀⠀⠀㐀⨀挀⬀㌀⤀⼀㄀㐀㘀㄀⤀㬀 
	e = c - INT((1461*d)/4);਀ऀ洀 㴀 䤀一吀⠀⠀㔀⨀攀⬀㈀⤀⼀㄀㔀㌀⤀㬀 
	day = e - INT((153*m+2)/5) + 1;਀ऀ洀漀渀琀栀 㴀 洀 ⬀ ㌀ ⴀ ㄀㈀⨀䤀一吀⠀洀⼀㄀　⤀㬀 
	year = b*100 + d - 4800 + INT(m/10);਀ऀ爀攀琀甀爀渀 洀漀渀琀栀㬀 
}਀ 
਀昀甀渀挀琀椀漀渀 渀愀洀搀氀⠀氀甀渀愀爀䐀愀礀Ⰰ 氀甀渀愀爀䴀漀渀琀栀Ⰰ 氀甀渀愀爀夀攀愀爀Ⰰ 氀甀渀愀爀䰀攀愀瀀Ⰰ 琀椀洀攀娀漀渀攀⤀ 笀 
	var k, a11, b11, off, leapOff, leapMonth, monthStart;਀ऀ椀昀 ⠀氀甀渀愀爀䴀漀渀琀栀 㰀 ㄀㄀⤀ 笀 
		a11 = getLunarMonth11(lunarYear-1, timeZone);਀ऀऀ戀㄀㄀ 㴀 最攀琀䰀甀渀愀爀䴀漀渀琀栀㄀㄀⠀氀甀渀愀爀夀攀愀爀Ⰰ 琀椀洀攀娀漀渀攀⤀㬀 
	} else {਀ऀऀ愀㄀㄀ 㴀 最攀琀䰀甀渀愀爀䴀漀渀琀栀㄀㄀⠀氀甀渀愀爀夀攀愀爀Ⰰ 琀椀洀攀娀漀渀攀⤀㬀 
		b11 = getLunarMonth11(lunarYear+1, timeZone);਀ऀ紀 
	k = INT(0.5 + (a11 - 2415021.076998695) / 29.530588853);਀ऀ漀昀昀 㴀 氀甀渀愀爀䴀漀渀琀栀 ⴀ ㄀㄀㬀 
	if (off < 0) {਀ऀऀ漀昀昀 ⬀㴀 ㄀㈀㬀 
	}਀ऀ椀昀 ⠀戀㄀㄀ ⴀ 愀㄀㄀ 㸀 ㌀㘀㔀⤀ 笀 
		leapOff = getLeapMonthOffset(a11, timeZone);਀ऀऀ氀攀愀瀀䴀漀渀琀栀 㴀 氀攀愀瀀伀昀昀 ⴀ ㈀㬀 
		if (leapMonth < 0) {਀ऀऀऀ氀攀愀瀀䴀漀渀琀栀 ⬀㴀 ㄀㈀㬀 
		}਀ऀऀ椀昀 ⠀氀甀渀愀爀䰀攀愀瀀 ℀㴀 　 ☀☀ 氀甀渀愀爀䴀漀渀琀栀 ℀㴀 氀攀愀瀀䴀漀渀琀栀⤀ 笀 
			return new Array(0, 0, 0);਀ऀऀ紀 攀氀猀攀 椀昀 ⠀氀甀渀愀爀䰀攀愀瀀 ℀㴀 　 簀簀 漀昀昀 㸀㴀 氀攀愀瀀伀昀昀⤀ 笀 
			off += 1;਀ऀऀ紀 
	}਀ऀ洀漀渀琀栀匀琀愀爀琀 㴀 最攀琀一攀眀䴀漀漀渀䐀愀礀⠀欀⬀漀昀昀Ⰰ 琀椀洀攀娀漀渀攀⤀㬀 
	jd = monthStart+lunarDay-1;਀ऀ椀昀 ⠀樀搀 㸀 ㈀㈀㤀㤀㄀㘀　⤀ 笀 ⼀⼀ 䄀昀琀攀爀 㔀⼀㄀　⼀㄀㔀㠀㈀Ⰰ 䜀爀攀最漀爀椀愀渀 挀愀氀攀渀搀愀爀 
		a = jd + 32044;਀ऀऀ戀 㴀 䤀一吀⠀⠀㐀⨀愀⬀㌀⤀⼀㄀㐀㘀　㤀㜀⤀㬀 
		c = a - INT((b*146097)/4);਀ऀ紀 攀氀猀攀 笀 
		b = 0;਀ऀऀ挀 㴀 樀搀 ⬀ ㌀㈀　㠀㈀㬀 
	}਀ऀ搀 㴀 䤀一吀⠀⠀㐀⨀挀⬀㌀⤀⼀㄀㐀㘀㄀⤀㬀 
	e = c - INT((1461*d)/4);਀ऀ洀 㴀 䤀一吀⠀⠀㔀⨀攀⬀㈀⤀⼀㄀㔀㌀⤀㬀 
	day = e - INT((153*m+2)/5) + 1;਀ऀ洀漀渀琀栀 㴀 洀 ⬀ ㌀ ⴀ ㄀㈀⨀䤀一吀⠀洀⼀㄀　⤀㬀 
	year = b*100 + d - 4800 + INT(m/10);਀ऀ爀攀琀甀爀渀 礀攀愀爀㬀 
}਀਀