Convert hebrew dates
/*!
Original code found here: http://www.dafaweek.com/HebCal/HebCalSampleSource.php
Simplifed by Kodie Grantham - http://kodieg.com
Hebrew Months:
1 - Tishrei
2 - Cheshvan
3 - Kislev
4 - Teves
5 - Shevat
6 - Adar A (only valid on leap years)
7 - Adar (Adar B for leap years)
8 - Nisan
9 - Iyar
10 - Sivan
11 - Tamuz
12 - Av
13 - Elul
*/
function convertHebrewDate(year, month, date) {
if (year instanceof Date) {
date = year.getDate();
month = year.getMonth();
year = year.getFullYear();
} else {
date = parseInt(date);
month = parseInt(month);
year = parseInt(year);
}
var ly = function(y) {
var n = y % 19;
return (n == 3 || n == 6 || n == 8 || n == 11 || n == 14 || n == 17 || n === 0);
};
var ti = function(y) {
var h = y - 1;
var m = Math.floor(h / 19) * 235;
h = h % 19;
m += 12 * h;
if (h >= 17) {
m += 6;
} else if (h >= 14) {
m += 5;
} else if (h >= 11) {
m += 4;
} else if (h >= 8) {
m += 3;
} else if (h >= 6) {
m += 2;
} else if (h >= 3) {
m += 1;
}
var c = 793 * m + 204;
var o = Math.floor(c / 1080);
c = c % 1080;
o += m * 12 + 5;
var d = Math.floor(o / 24);
o = o % 24;
d += 29 * m + 2;
var w = d % 7;
if (!ly(y) && w == 3 && (o * 1080) + c >= (9 * 1080) + 204) {
w = 5;
d += 2;
} else if (ly(y - 1) && w == 2 && (o * 1080) + c >= (15 * 1080) + 589) {
w = 3;
d += 1;
} else {
if (o >= 18) { w += 1; w = w % 7; d += 1; }
if (w == 1 || w == 4 || w == 6) { w += 1; w = w % 7; d += 1; }
}
d -= 2067025;
var t = new Date(1900, 0, 1);
t.setDate(t.getDate() + d);
return t
};
var lo = function(y) {
return Math.round((ti(y + 1) - ti(y)) / (1000 * 60 * 60 * 24));
};
this.toGreg = function() {
var e;
var l = ly(year);
var o = lo(year);
var h = (o == 353 || o == 383);
var s = (o == 355 || o == 385);
var d = ti(year);
for (var m = 1; m <= month - 1; m ++) {
if (m == 1 || m == 5 || m == 8 || m == 10 || m == 12) {
e = 30;
} else if (m == 4 || m == 7 || m == 9 || m == 11 || m == 13) {
e = 29;
} else if (m == 6) {
e = (l ? 30 : 0);
} else if (m == 2) {
e = (s ? 30 : 29);
} else if (m == 3) {
e = (h ? 29 : 30);
}
d.setDate(d.getDate() + e);
}
d.setDate(d.getDate() + date - 1);
return [d.getFullYear(), (d.getMonth() + 1), d.getDate()];
};
this.toHeb = function() {
var d, q, w;
var g = new Date(year, month - 1, date);
var b = new Date(1900, 0, 1);
var o = 29 + (12 / 24) + (793 / (1080 * 24));
var a = o * (235 / 19);
var n = Math.round((g - b) / (24 * 60 * 60 * 1000)) + 2067025;
var y = Math.floor(n / a) + 1;
var t = ti(y);
if (t.getTime() === g.getTime()) {
m = 1;
d = 1;
} else {
if (t < g) {
while (ti(y + 1) <= g) { y += 1 }
} else {
y -= 1;
while (ti(y) > g) { y -= 1; }
}
n = Math.round(g - ti(y)) / (24 * 60 * 60 * 1000);
var e = lo(y);
var h = (e == 353 || e == 383);
var s = (e == 355 || e == 385);
var l = ly(y);
var m = 1;
do {
switch (m) {
case 1: case 5: case 6: case 8: case 10: case 12:
q = 30;
break;
case 4: case 7: case 9: case 11: case 13:
q = 29;
break;
case 6:
q = 30;
break;
case 2:
q = (s ? 30 : 29);
break;
case 3:
q = (h ? 29: 30);
break;
}
if (n >= q) {
w = true;
n -= q;
if (l || m != 5) { m++; } else { m += 2; }
} else { w = false; }
} while (w) { d = n + 1; }
}
return [y, m, d];
};
return this;
}
var h = convertHebrewDate(2017, 4, 20).toHeb();
var g = convertHebrewDate(5777, 8, 24).toGreg();