// The Tibetan calendar for 2005 //Phukluk var cal = new Array( "2000/02/06*11-30+", "2000/03/07+04-", "2000/04/05*09-22+", "2000/05/05*03-", "2000/06/03*06-18+29-", "2000/07/02*", "2000/08/01*02-14+24-", "2000/08/30*27-", "2000/09/28*10+21-", "2000/10/28*25-", "2000/11/26*04+18-", "2000/12/26*08+12-", "2001/01/25*17-29+", "2001/02/24*12-", "2001/03/25*17-22+", "2001/04/24*10-26+", "2001/05/24*03-", "2001/06/22*06-22+28-", "2001/07/21*10-12+", "2001/08/20*02-19+24-", "2001/09/18*05-09+28-", "2001/10/17*14+21-", "2001/11/16*25-", "2001/12/15*07+20-", "2002/01/14*26-28+", "2002/02/13*19-", "2002/03/14*02+13-", "2002/04/13*17-26+", "2002/05/13*10-", "2002/06/11*13-21+", "2002/07/11*06-", "2002/08/09*09-18+", "2002/09/08*02-", "2002/10/07*05-13+28-", "2002/11/05*19+20-", "2002/12/05+03-06+26-", "2003/01/03*10+21-", "2003/02/02*26-", "2003/03/03*02+20-", "2003/04/02*06+13-", "2003/05/02*17-30+", "2003/06/01*10-", "2003/06/30*13-26+", "2003/07/30*06-", "2003/08/28*09-23+", "2003/09/27*02-", "2003/10/26*05-17+29-", "2003/11/24*", "2003/12/24*04-10+28-", "2004/01/22*13+22-", "2004/02/21*27-", "2004/03/21*05+20-", "2004/04/20*10+13-25-28+", "2004/05/20*17-", "2004/06/18*04+10-22-24+", "2004/07/18*13-", "2004/08/16*02+05-16-22+", "2004/09/15*09-27+", "2004/10/15*01-14-16+", "2004/11/13*06-21+30-", "2004/12/12*", "2005/01/11*05-13+29-", "2005/02/09*16+23-", "2005/03/11*27-", "2005/04/09*09+21-", "2005/05/09*25-", "2005/06/07*03+18-", "2005/07/07*20-30+", "2005/08/06+13-", "2005/09/04*16-26+", "2005/10/04*09-", "2005/11/02*13-20+", "2005/12/02*07-24+", "2006/01/01*01-", "2006/01/30*06-16+30-", "2006/02/28*19+23-", "2006/03/30*28-", "2006/04/28*12+22-", "2006/05/28*25-", "2006/06/26*08+18-", "2006/07/26*20-", "2006/08/24*05+13-", "2006/09/23*16-30+", "2006/10/23*10-", "2006/11/21*14-24+", "2006/12/21*08-27+", "2007/01/20*01-", "2007/02/18*07-19+", "2007/03/20*01-", "2007/04/18*05-12+29-", "2007/05/17*17+21-", "2007/06/16*03-07+25-", "2007/07/15*14+16-28-", "2007/08/13*04+20-", "2007/09/12*24-29+", "2007/10/12*17-", "2007/11/10*04+10-", "2007/12/10*15-27+", "2008/01/09*09-", "2008/02/07*15-18+", "2008/03/08*08-22+", "2008/04/07*02-", "2008/05/06+06-16+29-", "2008/06/04*", "2008/07/04*02-12+25-", "2008/08/02*27-", "2008/08/31*09+20-", "2008/09/30*24-", "2008/10/29*03+17-", "2008/11/28*23-26+", "2008/12/28*16-30+", "2009/01/27*10-", "2009/02/25*15-21+", "2009/03/27*09-25+", "2009/04/26*02-", "2009/05/25*06-20+29-", "2009/06/23*", "2009/07/23*02-17+24-", "2009/08/21*27-", "2009/09/19*13+20-", "2009/10/19*24-", "2009/11/17*07+18-", "2009/12/17*23-29+", "2010/01/16*17-", "2010/02/14*02+11-", "2010/03/16*16-25+", "2010/04/15*10-", "2010/05/14*14-19+", "2010/06/13*06-26+27-", "2010/07/12*09-16+", "2010/08/11*02-", "2010/09/09*05-12+28-", "2010/10/08*", "2010/11/07*02-06+25-", "2010/12/06*10+19-", "2011/01/05+24-", "2011/02/03*02+18-", "2011/03/05*05+12-", "2011/04/04*17-29+", "2011/05/04*10-", "2011/06/02*13-24+", "2011/07/02*06-", "2011/07/31*09-21+", "2011/08/30*02-", "2011/09/28*05-16+28-", "2011/10/27*", "2011/11/26*02-10+26-", "2011/12/25*13+20-", "2012/01/24*25-", "2012/02/22*05+19-", "2012/03/23*09+12-25-27+", "2012/04/22*17-", "2012/05/21*03+10-", "2012/06/20*13-29+", "2012/07/20*06-", "2012/08/18*09-25+", "2012/09/17*01-", "2012/10/16*05-20+29-", "2012/11/14*", "2012/12/14*03-13+27-", "2013/01/12*17+21-", "2013/02/11*26-", "2013/03/12*08+20-", "2013/04/11*24-", "2013/05/10*02+18-", "2013/06/09*21-28+", "2013/07/09*13-", "2013/08/07*16-24+", "2013/09/06*09-", "2013/10/05+12-20+", "2013/11/04*06-24+29-", "2013/12/03*", "2014/01/02*04-16+28-", "2014/01/31*", "2014/03/02*04-07+27-", "2014/03/31*12+21-", "2014/04/30*25-", "2014/05/29*06+18-", "2014/06/28*20-", "2014/07/27*03+13-", "2014/08/26*16-29+", "2014/09/25*09-", "2014/10/24*13-23+", "2014/11/23*06-", "2014/12/22*12-16+", "2015/01/21*05-19+30-", "2015/02/19*", "2015/03/21*04-11+28-", "2015/04/19*15+21-", "2015/05/19*25-", "2015/06/17*11+17-", "2015/07/17*20-", "2015/08/15*08+12-24-27+", "2015/09/14*16-", "2015/10/13*03+09-", "2015/11/12*13-27+", "2015/12/12*07-", "2016/01/10*12-19+", "2016/02/09*06-22+", "2016/03/10*01-", "2016/04/08*05-15+29-", "2016/05/07*", "2016/06/06+02-10+25-", "2016/07/05*28-", "2016/08/03*06+20-", "2016/09/02*23-", "2016/10/01*02+17-", "2016/10/31*21-26+", "2016/11/30*14-30+", "2016/12/30*08-", "2017/01/28*13-22+", "2017/02/27*08-25+", "2017/03/29*01-", "2017/04/27*06-19+29-", "2017/05/26*", "2017/06/25*02-14+25-", "2017/07/24*27-", "2017/08/22*11+20-", "2017/09/21*24-", "2017/10/20*06+17-", "2017/11/19*21-30+", "2017/12/19*15-", "2018/01/17*03+09-", "2018/02/16*15-25+", "2018/03/18*09-", "2018/04/16*13-18+", "2018/05/16*06-23+29-", "2018/06/14*", "2018/07/14*02-20+24-", "2018/08/12*05-10+28-", "2018/09/10*16+19-", "2018/10/10*02-05+24-", "2018/11/08*10+18-", "2018/12/08*22-", "2019/01/06*03+17-", "2019/02/05*06+10-", "2019/03/07+16-28+", "2019/04/06*09-", "2019/05/05*13-22+", "2019/06/04*06-", "2019/07/03*09-18+", "2019/08/02*02-", "2019/08/31*05-15+28-", "2019/09/29*", "2019/10/29*01-10+25-", "2019/11/27*14+18-", "2019/12/27*23-", "2020/01/25*05+18-" ); //Tsurluk var cal2 = new Array( "2000/02/06*11-28+", "2000/03/07*05-", "2000/04/05*09-22+", "2000/05/05*03-", "2000/06/03*06-17+29-", "2000/07/02*", "2000/08/01*02-14+25-", "2000/08/30*28-", "2000/09/28*09+21-", "2000/10/28+25-", "2000/11/26*03+19-", "2000/12/26*06+13-", "2001/01/25*18-28+", "2001/02/24*12-", "2001/03/25*02+05-18-20+", "2001/04/24*10-26+", "2001/05/24*03-", "2001/06/22*06-22+29-", "2001/07/21*", "2001/08/20*02-18+24-", "2001/09/18*28-", "2001/10/17*13+22-", "2001/11/16*26-", "2001/12/15*06+20-", "2002/01/14*10+14-", "2002/02/13*19-", "2002/03/14*01+13-", "2002/04/13*17-25+", "2002/05/13*10-", "2002/06/11*14-21+", "2002/07/11*06-", "2002/08/09*09-17+", "2002/09/08*02-", "2002/10/07*05-13+29-", "2002/11/05*17+22-", "2002/12/05*27-", "2003/01/03*09+21-", "2003/02/02*27-30+", "2003/03/04*20-", "2003/04/02*05+14-", "2003/05/02*17-29+", "2003/06/01*11-", "2003/06/30+13-26+", "2003/07/30*06-", "2003/08/28*09-22+", "2003/09/27*02-", "2003/10/26*06-16+29-", "2003/11/24*", "2003/12/24*05-09+28-", "2004/01/22*12+23-", "2004/02/21*27-", "2004/03/21*04+21-", "2004/04/20*09+14-", "2004/05/20*18-", "2004/06/18*04+10-", "2004/07/18*13-", "2004/08/16*01+05-17-20+", "2004/09/15*09-26+", "2004/10/15*02-", "2004/11/13*06-20+30-", "2004/12/12*", "2005/01/11*05-12+29-", "2005/02/09*15+24-", "2005/03/11*28-", "2005/04/09*08+21-", "2005/05/09*25-", "2005/06/07*03+18-", "2005/07/07*21-29+", "2005/08/06*13-", "2005/09/04*16-25+", "2005/10/04*10-", "2005/11/02*14-19+", "2005/12/02*07-23+", "2006/01/01*01-", "2006/01/30*06-15+", "2006/03/01+01-18+24-", "2006/03/30*28-", "2006/04/28*12+22-", "2006/05/28*25-", "2006/06/26*07+18-", "2006/07/26*20-", "2006/08/24*04+13-", "2006/09/23*17-29+", "2006/10/23*10-", "2006/11/21*14-23+", "2006/12/21*08-26+", "2007/01/20*02-", "2007/02/18*07-18+", "2007/03/20*02-", "2007/04/18*06-11+29-", "2007/05/17*16+22-", "2007/06/16*04-05+25-", "2007/07/15*13+17-28-", "2007/08/13*03+20-", "2007/09/12*09+12-25-28+", "2007/10/12*17-", "2007/11/10*03+11-", "2007/12/10*15-26+", "2008/01/09*10-29+", "2008/02/08*03-", "2008/03/08*08-21+", "2008/04/07*02-", "2008/05/06*06-15+29-", "2008/06/04*", "2008/07/04*02-11+25-", "2008/08/02*28-", "2008/08/31*08+21-", "2008/09/30*24-", "2008/10/29*03+18-", "2008/11/28+07+11-", "2008/12/28*16-29+", "2009/01/27*11-", "2009/02/25*16-20+", "2009/03/27*09-25+", "2009/04/26*03-", "2009/05/25*06-20+29-", "2009/06/23*", "2009/07/23*02-16+25-", "2009/08/21*28-", "2009/09/19*12+21-", "2009/10/19*25-", "2009/11/17*06+19-", "2009/12/17*24-28+", "2010/01/16*18-", "2010/02/14*01+12-", "2010/03/16*16-24+", "2010/04/15*10-29+", "2010/05/15*02-14-18+", "2010/06/13*06-25+28-", "2010/07/12*10-15+", "2010/08/11*02-", "2010/09/09*05-11+28-", "2010/10/08*17+21-", "2010/11/07*26-", "2010/12/06*09+20-", "2011/01/05*25-", "2011/02/03*01+19-", "2011/03/05*04+13-", "2011/04/04*17-28+", "2011/05/04*10-", "2011/06/02*14-23+", "2011/07/02*06-", "2011/07/31+09-20+", "2011/08/30*02-", "2011/09/28*05-16+29-", "2011/10/27*", "2011/11/26*03-09+27-", "2011/12/25*12+21-", "2012/01/24*26-", "2012/02/22*04+20-", "2012/03/23*08+13-", "2012/04/22*17-", "2012/05/21*02+11-", "2012/06/20*14-28+", "2012/07/20*06-", "2012/08/18*09-25+", "2012/09/17*02-", "2012/10/16*06-19+29-", "2012/11/14*", "2012/12/14*03-12+28-", "2013/01/12*15+22-", "2013/02/11*27-", "2013/03/12*07+21-", "2013/04/11*25-", "2013/05/10*01+18-", "2013/06/09*07+09-21-27+", "2013/07/09*14-", "2013/08/07*16-24+", "2013/09/06*09-", "2013/10/05*13-19+", "2013/11/04*06-23+30-", "2013/12/03*", "2014/01/02*05-15+29-", "2014/01/31*18+23-", "2014/03/02*28-", "2014/03/31+11+21-", "2014/04/30*25-", "2014/05/29*05+18-", "2014/06/28*21-", "2014/07/27*02+13-", "2014/08/26*16-28+", "2014/09/25*09-", "2014/10/24*13-23+", "2014/11/23*07-27+30-", "2014/12/22*", "2015/01/21*06-18+30-", "2015/02/19*", "2015/03/21*05-10+28-", "2015/04/19*15+22-", "2015/05/19*25-", "2015/06/17*10+18-", "2015/07/17*21-", "2015/08/15*07+13-", "2015/09/14*17-", "2015/10/13*02+10-", "2015/11/12*14-26+", "2015/12/12*08-", "2016/01/10*14-17+", "2016/02/09*07-21+", "2016/03/10*01-", "2016/04/08*05-14+29-", "2016/05/07*", "2016/06/06*03-09+25-", "2016/07/05*28-", "2016/08/03*06+21-", "2016/09/02*24-", "2016/10/01*02+17-", "2016/10/31*07+09-22-25+", "2016/11/30*15-29+", "2016/12/30+09-", "2017/01/28*14-21+", "2017/02/27*08-24+", "2017/03/29*02-", "2017/04/27*06-18+29-", "2017/05/26*", "2017/06/25*02-14+25-", "2017/07/24*28-", "2017/08/22*11+21-", "2017/09/21*24-", "2017/10/20*06+18-", "2017/11/19*22-29+", "2017/12/19*16-", "2018/01/17*02+10-", "2018/02/16*15-24+", "2018/03/18*09-28+", "2018/04/17*02-14-16+", "2018/05/16*06-22+29-", "2018/06/14*", "2018/07/14*02-19+24-", "2018/08/12*06-09+28-", "2018/09/10*15+20-", "2018/10/10*25-", "2018/11/08*09+18-", "2018/12/08*23-", "2019/01/06*02+17-", "2019/02/05*05+11-", "2019/03/07*16-27+", "2019/04/06*10-", "2019/05/05*14-21+", "2019/06/04*07-", "2019/07/03*09-18+", "2019/08/02*02-", "2019/08/31+05-14+28-", "2019/09/29*", "2019/10/29*02-09+25-", "2019/11/27*13+19-", "2019/12/27*24-", "2020/01/25*04+18-" ); var annual = new Array ( "01/01*Losar", "01/14*Milarepa Day", "04/07*Buddha's Birth", "04/15*Buddha's Enlightenment and Parinirvana", "06/04*Buddha's First Sermon", "09/22*Buddha's Return From Heaven" ); var monthly = new Array ( "08*Medicine Buddha Day", "10*Guru Rinpoche Day", "15*Full Moon", "25*Dakini Day", "29*Protectors Day", "30*New Moon" ); function slash(date) { var daystr = ""; for (var i=date.length-1; i >=0; i --) { if (daystr) daystr = daystr + "/" if (date[i] < 10) daystr = daystr + "0"; daystr = daystr + date[i]; } return daystr; } function makeOrdinal (nr) { var suffix = new Array ("th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th"); var str; if (nr >= 0) { str = ""; } else { str = "2nd "; nr = -nr; } if (nr == 11 || nr == 12 || nr == 13) { str = str + nr + "th"; } else { str = str + nr + suffix[nr%10]; } return str; } function unslash (slashed) { var date = slashed.split("/"); return new Array ( parseInt(date[2],10), parseInt(date[1],10), parseInt(date[0],10)); } function lookup(cal, daystr) { var n = daystr.length; for (i = 0; i < cal.length; i ++) { if (cal[i].substr(0, n) > daystr) { return i-1; } } return -1; } function dayNumber(date) { date[2] = date[2] - 1900; var day = Math.floor(365.25 * date[2]) + Math.floor(30.55 * (date[1] + 2)) + date[0] - 91; if (date[1] > 2) { if (date[2] && date[2] % 4 == 0) { day = day - 1; } else { day = day - 2; } } return day; } function calcTibetanDate (cal, date) { var daystr = slash(date); var i = lookup(cal, daystr); var m = 0; var d = 0; if (i >= 0) { for (var j=0; j= 0 && cal[i].substr(0,n) == daystr) { daystr = cal[i].substr(n+1); } else { daystr = "" } return daystr } function strTibetanDate(tdate) { var str = ""; if (tdate[0]) { str = makeOrdinal(tdate[0]) + " day of the "; str = str + makeOrdinal(tdate[1]) + " month"; var hday = holiday (annual, tdate); if (hday) { str = str + "
\n" + hday; } else { td = new Array (1); td[0] = tdate[0]; hday = holiday (monthly, td); if (hday) { str = str + "
\n" + hday; } } } return str; } function getTibetanDate (mode, name) { var time; if (arguments.length < 2) { time = new Date(); } else { time = new Date(name); } var date = new Array (time.getDate(), time.getMonth()+1, time.getFullYear()); var tdate; if (mode == "t") { tdate = calcTibetanDate (cal2, date); // Tsurluk } else { tdate = calcTibetanDate (cal, date); // Phukluk } var tname = strTibetanDate (tdate); return tname; }