react-native-jewish-calendar
Version:
jewish calendar for react native apps
171 lines • 6.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.YEARBETWEENGEROGIANTOJEWISH = 3761;
exports.MILISECONDINDAY = 1000 * 60 * 60 * 24;
var YEAR_LENGTH;
(function (YEAR_LENGTH) {
YEAR_LENGTH["HASER"] = "\u05D7";
YEAR_LENGTH["SHLEMA"] = "\u05E9";
YEAR_LENGTH["KASEDER"] = "\u05DB";
})(YEAR_LENGTH || (YEAR_LENGTH = {}));
var YEAR_MONTHS;
(function (YEAR_MONTHS) {
YEAR_MONTHS["TESHRI"] = "\u05EA\u05E9\u05E8\u05D9";
YEAR_MONTHS["HESVAN"] = "\u05D7\u05E9\u05D5\u05DF";
YEAR_MONTHS["KESLEV"] = "\u05DB\u05E1\u05DC\u05D5";
YEAR_MONTHS["TEVET"] = "\u05D8\u05D1\u05EA";
YEAR_MONTHS["SHVAT"] = "\u05E9\u05D1\u05D8";
YEAR_MONTHS["ADAR"] = "\u05D0\u05D3\u05E8";
YEAR_MONTHS["ADARA"] = "\u05D0\u05D3\u05E8 \u05D0'";
YEAR_MONTHS["ADARB"] = "\u05D0\u05D3\u05E8 \u05D1'";
YEAR_MONTHS["NISAN"] = "\u05E0\u05D9\u05E1\u05DF";
YEAR_MONTHS["IAR"] = "\u05D0\u05D9\u05D9\u05E8";
YEAR_MONTHS["SIVAN"] = "\u05E1\u05D9\u05D5\u05DF";
YEAR_MONTHS["TAMUZ"] = "\u05EA\u05DE\u05D5\u05D6";
YEAR_MONTHS["AV"] = "\u05D0\u05D1";
YEAR_MONTHS["ELOL"] = "\u05D0\u05DC\u05D5\u05DC";
})(YEAR_MONTHS = exports.YEAR_MONTHS || (exports.YEAR_MONTHS = {}));
var DAYS_WEEK;
(function (DAYS_WEEK) {
DAYS_WEEK["RESON"] = "\u05E8\u05D0\u05E9\u05D5\u05DF";
DAYS_WEEK["SHENI"] = "\u05E9\u05E0\u05D9";
DAYS_WEEK["SHLISHI"] = "\u05E9\u05DC\u05D9\u05E9\u05D9";
DAYS_WEEK["REVEI"] = "\u05E8\u05D1\u05D9\u05E2\u05D9";
DAYS_WEEK["HAMESHI"] = "\u05D7\u05DE\u05D9\u05E9\u05D9";
DAYS_WEEK["SHISHI"] = "\u05E9\u05D9\u05E9\u05D9";
DAYS_WEEK["SHABAT"] = "\u05E9\u05D1\u05EA";
})(DAYS_WEEK = exports.DAYS_WEEK || (exports.DAYS_WEEK = {}));
exports.MONTHES = ['', YEAR_MONTHS.TESHRI, YEAR_MONTHS.HESVAN, YEAR_MONTHS.KESLEV,
YEAR_MONTHS.TEVET, YEAR_MONTHS.SHVAT, YEAR_MONTHS.ADAR, YEAR_MONTHS.ADARB,
YEAR_MONTHS.NISAN, YEAR_MONTHS.IAR, YEAR_MONTHS.SIVAN, YEAR_MONTHS.TAMUZ,
YEAR_MONTHS.AV, YEAR_MONTHS.ELOL];
exports.WEEKDAY = [DAYS_WEEK.RESON, DAYS_WEEK.SHENI, DAYS_WEEK.SHLISHI,
DAYS_WEEK.REVEI, DAYS_WEEK.HAMESHI, DAYS_WEEK.SHISHI, DAYS_WEEK.SHABAT];
/**
* find the day in September that Rosh Hashana occour.
* @param {number} year a georigian year
* @returns {Date} the georgian date of rosh hashana
* @see calculate rosh hashana day https://quasar.as.utexas.edu/BillInfo/ReligiousCalendars.html
*/
function dayOfRoshHashana(year) {
let gn = (year % 19) + 1;
let n = Math.floor(year / 100) - Math.floor(year / 400) - 2 + 765433 / 492480 * ((12 * gn) % 19) + (year % 4) / 4 - (313 * year + 89081) / 98496;
let r = n % 1;
n = Math.floor(n);
let d = new Date(year, 8, n).getDay();
let r1 = (12 * gn) % 19;
if (d == 0 || d == 3 || d == 5) {
n += 1;
}
else if (d == 1 && r >= (23269 / 25920) && r1 > 11) {
n += 1;
}
else if (d == 2 && r >= (1367 / 2160) && r1 > 6) {
n += 2;
}
return fixedDate(new Date(year, 8, n));
}
exports.dayOfRoshHashana = dayOfRoshHashana;
/**
* return the Gimatria value of a number
* @param {number} num a number to as gimatria value
*/
function gimatria(num) {
if (typeof (num) == typeof ('1')) {
num = parseInt(num);
}
const to10 = ['', 'א', 'ב', 'ג', 'ד', 'ה', 'ו', 'ז', 'ח', 'ט'];
const to100 = ['', 'י', 'כ', 'ל', 'מ', 'נ', 'ס', 'ע', 'פ', 'צ'];
const to1000 = ['', 'ק', 'ר', 'ש', 'ת', 'תק', 'תר', 'תש', 'תת', 'תתק'];
num = Math.floor(num);
if (num > 1000) {
return gimatria(Math.floor(num / 1000)) + "'" + gimatria(num % 1000);
}
let g = to1000[Math.floor(num / 100)] + to100[Math.floor((num % 100) / 10)] + to10[num % 10];
g = '' + g;
g = g.replace('יה', 'טו').replace('יו', 'טז');
return g;
}
exports.gimatria = gimatria;
/**
* return the days in hebew year
* @param {number} year hebrew year to find her length
*/
function daysInYear(year) {
let rosh = dayOfRoshHashana(year - exports.YEARBETWEENGEROGIANTOJEWISH);
let nextYear = dayOfRoshHashana(year - exports.YEARBETWEENGEROGIANTOJEWISH + 1);
return (nextYear.getTime() - rosh.getTime()) / exports.MILISECONDINDAY;
}
exports.daysInYear = daysInYear;
function daysInMonth(month, isLeap, daysInYear) {
switch (month) {
case YEAR_MONTHS.KESLEV:
return daysInYear % 10 === 3 ? 29 : 30;
case YEAR_MONTHS.HESVAN:
return daysInYear % 10 === 5 ? 30 : 29;
case YEAR_MONTHS.ADAR:
return isLeap ? 30 : 29;
case YEAR_MONTHS.TESHRI:
case YEAR_MONTHS.SHVAT:
case YEAR_MONTHS.NISAN:
case YEAR_MONTHS.SIVAN:
case YEAR_MONTHS.AV:
return 30;
case YEAR_MONTHS.TEVET:
case YEAR_MONTHS.ADARB:
case YEAR_MONTHS.IAR:
case YEAR_MONTHS.TAMUZ:
case YEAR_MONTHS.ELOL:
return 29;
default:
throw new Error(`no such month ${month}`);
}
}
exports.daysInMonth = daysInMonth;
function fixedDate(d) {
//d.setHours(d.getHours() + 3) // fixed to GMC +3
return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 3);
}
exports.fixedDate = fixedDate;
class YearType {
constructor(_rosh, _daysInYear, _leap) {
this.rosh = _rosh;
this.daysInYear = _daysInYear;
this.leap = _leap;
this.findType();
this.findPesahDate();
}
findPesahDate() {
if (this.length === YEAR_LENGTH.HASER) {
this.pesah = new Date(this.rosh.getTime() + ((this.leap ? 220 : 190) * exports.MILISECONDINDAY));
}
else if (this.length == YEAR_LENGTH.KASEDER) {
this.pesah = new Date(this.rosh.getTime() + ((this.leap ? 221 : 191) * exports.MILISECONDINDAY));
}
else {
this.pesah = new Date(this.rosh.getTime() + ((this.leap ? 222 : 192) * exports.MILISECONDINDAY));
}
}
findType() {
if (this.daysInYear % 10 == 3)
this.length = YEAR_LENGTH.HASER;
else if (this.daysInYear % 10 == 4)
this.length = YEAR_LENGTH.KASEDER;
else
this.length = YEAR_LENGTH.SHLEMA;
}
getRoshHashanaDayInWeek() {
return gimatria(this.rosh.getDay() + 1);
}
getPesahDayInWeek() {
return gimatria(this.pesah.getDay() + 1);
}
getYearLength() {
return this.length;
}
toString() {
return this.getRoshHashanaDayInWeek() + this.getYearLength() + this.getPesahDayInWeek();
}
}
exports.YearType = YearType;
//# sourceMappingURL=Common.js.map