var HebrewLeapYears = "0010010100100100101";
function showdate(){ today = new Date();
year = today.getYear(); if (year<1000) year = year + 1900
iday = today.getDay(); day = "SunMonTueWedThuFriSat".substr(iday*3,3)
imonth= today.getMonth(); month = "JanFebMarAprMayJunJulAugSepOctNovDec".substr(imonth*3,3)
todayStr = day + " " + today.getDate() + " " + month + ", " + year
return todayStr
}
function IsHebrewLeapYear(year)
{
var y = (year - 1) % 19;
return parseInt(HebrewLeapYears.charAt(y));
}
function InitHebrewMonthsNames(isleap)
{
this.length = (isleap) ? 13 : 12;
this[0] = "Tishrei";
this[1] = "Cheshvan";
this[2] = "Kislev";
this[3] = "Tevet";
this[4] = "Shvat";
this[5] = "Adar";
var incr = 0;
if (isleap) {
this[5] = "Adar1";
this[6] = "Adar2";
incr = 1;
}
this[6+incr] = "Nisan";
this[7+incr] = "Iyyar";
this[8+incr] = "Sivan";
this[9+incr] = "Tamuz";
this[10+incr] = "Av";
this[11+incr] = "Elul";
}
var HebrewMonthsNames = new InitHebrewMonthsNames(false);
var HebrewMonthsNamesLeap = new InitHebrewMonthsNames(true);
function InitGlobalTable()
{
this.length = 2001;
this[1980] = "11S0";
this[1981] = "29S2";
this[1982] = "18S3";
this[1983] = "08S3";
this[1984] = "27S2";
this[1985] = "16S0";
this[1986] = "04O3";
this[1987] = "24S2";
this[1988] = "12S0";
this[1989] = "30S3";
this[1990] = "20S2";
this[1991] = "09S3";
this[1992] = "28S0";
this[1993] = "16S3";
this[1994] = "06S2";
this[1995] = "25S3";
this[1996] = "14S0";
this[1997] = "02O2";
this[1998] = "21S3";
this[1999] = "11S3";
this[2000] = "30S0";
this[2001] = "18S2";
this[2002] = "07S3";
this[2003] = "27S3";
this[2004] = "16S0";
this[2005] = "04O2";
this[2006] = "23S3";
this[2007] = "13S0";
this[2008] = "30S2";
this[2009] = "19S3";
this[2010] = "09S3";
this[2011] = "29S2";
this[2012] = "17S0";
this[2013] = "05S3";
this[2014] = "25S2";
this[2015] = "14S3";
this[2016] = "03O0";
this[2017] = "21S2";
this[2018] = "10S3";
this[2019] = "30S3";
this[2020] = "19S0";
}
var GlobalTable = new InitGlobalTable();
/*
* Convert Julian year to Hebrew year
*/
function JulianYearToHebrew(/* int */ year)
{
return year + 3760;
}
function HebrewToJulianYear(/* int */ year)
{
return year - 3760;
}
/*
* Year length in days
* indexed by the year type, given in GlobalTable
*/
function InitYearLength(isleap)
{
this.length = 4;
if (isleap) {
this[0] = 383;
//this[1] = ; error
this[2] = 384;
this[3] = 385;
} else {
this[0] = 353;
//this[1] = ; error
this[2] = 354;
this[3] = 355;
}
}
var HebrewYearLengthLeap = new InitYearLength(true);
var HebrewYearLength = new InitYearLength(false);
var Tishrei = 0;
var Cheshvan = 1;
var Kislev = 2;
var Adar1 = 5;
var Adar2 = 6;
var HebMonths30 = "1010101010101";
var HebMonths30Leap = "10101011010101";
function DaysInHebrewFixedMonth(month, year)
{
var incr;
if (IsHebrewLeapYear(year))
incr = parseInt(HebMonths30Leap.charAt(month));
else
incr = parseInt(HebMonths30.charAt(month));
return 29 + incr; // 29 or 30
}
function DaysInCheshvan(hebyear)
{
var ytype = GlobalTable[HebrewToJulianYear(hebyear)-1].charAt(3);
if (ytype == 3)
return 30;
else
return 29;
}
function DaysInKislev(hebyear)
{
var ytype = GlobalTable[HebrewToJulianYear(hebyear)-1].charAt(3);
if (ytype == 0)
return 29;
else
return 30;
}
function DaysInHebrewMonth(month, year)
{
if (month == Cheshvan)
return DaysInCheshvan(year);
else if (month == Kislev)
return DaysInKislev(year);
else
return DaysInHebrewFixedMonth(month, year);
}
function DaysInHebrewYear(/* int */ year)
{
var ytype = GlobalTable[year].charAt(3);
if (IsHebrewLeapYear(year)) {
return HebrewYearLengthLeap[ytype];
} else {
return HebrewYearLength[ytype];
}
}
var MsecPerDay = 1000*3600*24; // miliseconds per day
/*
* Add days to a Julian date
*/
function AddDays(
/* date */ date,
/* int */ days)
{
var time = date.getTime();
time += days*MsecPerDay;
date.setTime(time);
return date;
}
function SameHolidayInJulianYear(
/* date */ rosh_shana,
/* int */ toyear)
{
var fromyear = rosh_shana.getFullYear() + 1900;
var incr = 1; // increment fromyear
if (fromyear == toyear)
return rosh_shana;
else if (fromyear > toyear)
incr = -1; // decrement from_year
var days;
for (days = 0 ; fromyear != toyear ; fromyear += incr) {
days += DaysInHebrewYear(JulianYearToHebrew(fromyear));
}
AddDays(rosh_shana, incr*days);
return rosh_shana;
}
// returns date when Rosh Hashana occurs on this year
function GetRoshHashana(/* int */ cvyear)
{
var month;
var day;
var yearstr = GlobalTable[cvyear];
var m = yearstr.charAt(2);
month = 8; // usually September
if (m == 'O')
month = 9; // sometimes October
day = parseInt(yearstr.charAt(0))*10 + parseInt(yearstr.charAt(1));
return new Date(cvyear, month, day);
}
// is last month of the year?
function IsHebLastMonth()
{
if (this.month == 11 && !IsHebrewLeapYear(this.year))
return true;
if (this.month == 12 && IsHebrewLeapYear(this.year))
return true;
return false;
}
// go to next Hebrew month
function HebNextMonth()
{
if (this.IsLastMonth()) {
this.year++;
this.month = 0;
} else
this.month++;
this.DaysInThisMonth = DaysInHebrewMonth(this.month, this.year);
}
// next Hebrew day
function HebNextDay()
{
this.day++;
if (this.day > this.DaysInThisMonth) {
this.day = 1;
this.NextMonth();
}
}
// add days to Hebrew date
function HebAddDays(days)
{
while (days > 0) {
if (this.day == 1 && days >= this.DaysInThisMonth) {
days -= this.DaysInThisMonth;
this.NextMonth();
} else {
days--;
this.NextDay();
}
}
}
// print Hebrew date
function HebPrint()
{
var ThisMonthName = (IsHebrewLeapYear(this.year)) ?
HebrewMonthsNamesLeap[this.month] :
HebrewMonthsNames[this.month];
document.write("" + this.day + " " + ThisMonthName + ", " + this.year);
}
// the following functions are for printing the date in Hebrew
function HebPrintHebrewString()
{
if (this.length == 1)
document.write('
');
for (var i = this.length-1 ; i >= 0 ; i--) {
var s = ""; // ot sofit
if (i == this.length-1 && i > 0 &&
(this[i] == 20 || this[i] == 40 ||
this[i] == 50 || this[i] == 80 || this[i] == 90)) {
s = "s";
}
document.write('
');
if (i > 0 && i == this.length - 1)
document.write('
');
}
}
// constructor function for Hebrew string object
function IntegerToHebrewString(num)
{
var len = 0;
while (num > 0) {
var incr = 100;
var i;
if (num == 15 || num == 16) {
this[len++] = 9;
this[len++] = num - 9;
break;
}
for (i = 400 ; i > num ; i -= incr) { // tav to aleph
if (i == incr)
incr = incr / 10;
}
this[len++] = i;
num -= i;
}
this.length = len;
// print method
this.Print = HebPrintHebrewString;
}
// print date in Hebrew
function HebPrintHebrew()
{
var HebYear = new IntegerToHebrewString(this.year - 5000);
HebYear.Print();
document.write('
');
var ThisMonthName = (IsHebrewLeapYear(this.year)) ?
HebrewMonthsNamesLeap[this.month] :
HebrewMonthsNames[this.month];
ThisMonthName = ThisMonthName.toLowerCase();
document.write('
');
document.write('
');
var HebDay = new IntegerToHebrewString(this.day);
HebDay.Print();
}
// constructor for HebrewDate object
function InitHebrewDate(day, month, year)
{
// fields
this.day = day;
this.month = month;
this.year = year;
this.DaysInThisMonth = DaysInHebrewMonth(month, year);
// methods
this.IsLastMonth = IsHebLastMonth;
this.NextMonth = HebNextMonth;
this.NextDay = HebNextDay;
this.AddDays = HebAddDays;
this.Print = HebPrint;
this.PrintHebrew = HebPrintHebrew;
}
// end of HebrewDate object definition
var Today = new Date();
function ShowHebrewDate(date)
{
//var MyRoshHashana = new Date(99, 8, 11); // sep 11, 1999
var PrevYear = date.getFullYear() - 1;
var PrevRoshHashana = GetRoshHashana(PrevYear);
var DiffDays = Math.floor((date.getTime() - PrevRoshHashana.getTime()) / MsecPerDay);
var HebrewYear = JulianYearToHebrew(PrevYear);
var HebrewDate = new InitHebrewDate(1, 0, HebrewYear+1); // 1, Tishrei, year
HebrewDate.AddDays(DiffDays);
HebrewDate.Print();
}