265#define HALAKIM_PER_HOUR 1080
266#define HALAKIM_PER_DAY 25920
267#define HALAKIM_PER_LUNAR_CYCLE ((29 * HALAKIM_PER_DAY) + 13753)
268#define HALAKIM_PER_METONIC_CYCLE (HALAKIM_PER_LUNAR_CYCLE * (12 * 19 + 7))
270#define JEWISH_SDN_OFFSET 347997
271#define JEWISH_SDN_MAX 324542846L
272#define NEW_MOON_OF_CREATION 31524
282#define NOON (18 * HALAKIM_PER_HOUR)
283#define AM3_11_20 ((9 * HALAKIM_PER_HOUR) + 204)
284#define AM9_32_43 ((15 * HALAKIM_PER_HOUR) + 589)
28812, 12, 13, 12, 12, 13, 12, 13, 12, 12, 13, 12, 12, 13, 12, 12, 13, 12, 13
291static const int yearOffset[19] =
293 0, 12, 24, 37, 49, 61, 74, 86, 99, 111, 123,
294 136, 148, 160, 173, 185, 197, 210, 222
344 "\xE0\xE3\xF8 \xE0'",
345 "\xE0\xE3\xF8 \xE1'",
393 leapYear = metonicYear == 2 || metonicYear == 5 || metonicYear == 7
394 || metonicYear == 10 || metonicYear == 13 || metonicYear == 16
395 || metonicYear == 18;
396 lastWasLeapYear = metonicYear == 3 || metonicYear == 6
397 || metonicYear == 8 || metonicYear == 11 || metonicYear == 14
398 || metonicYear == 17 || metonicYear == 0;
401 if ((moladHalakim >=
NOON) ||
426static void MoladOfMetonicCycle(
463 r1 = (r2 << 16) | (r1 & 0xFFFF);
467 *pMoladDay = (
d2 << 16) |
d1;
481static void FindTishriMolad(
497 metonicCycle = (inputDay + 310) / 6940;
500 MoladOfMetonicCycle(metonicCycle, &moladDay, &moladHalakim);
506 while (moladDay < inputDay - 6940 + 310) {
514 for (metonicYear = 0; metonicYear < 18; metonicYear++) {
515 if (moladDay > inputDay - 74) {
523 *pMetonicCycle = metonicCycle;
524 *pMetonicYear = metonicYear;
525 *pMoladDay = moladDay;
526 *pMoladHalakim = moladHalakim;
533static void FindStartOfYear(
541 *pMetonicCycle = (year - 1) / 19;
542 *pMetonicYear = (year - 1) % 19;
543 MoladOfMetonicCycle(*pMetonicCycle, pMoladDay, pMoladHalakim);
549 *pTishri1 = Tishri1(*pMetonicYear, *pMoladDay, *pMoladHalakim);
582 FindTishriMolad(inputDay, &metonicCycle, &metonicYear, &day, &halakim);
583 tishri1 = Tishri1(metonicYear, day, halakim);
585 if (inputDay >= tishri1) {
587 *pYear = metonicCycle * 19 + metonicYear + 1;
588 if (inputDay < tishri1 + 59) {
589 if (inputDay < tishri1 + 30) {
591 *pDay = inputDay - tishri1 + 1;
594 *pDay = inputDay - tishri1 - 29;
603 tishri1After = Tishri1((metonicYear + 1) % 19, day, halakim);
606 *pYear = metonicCycle * 19 + metonicYear;
607 if (inputDay >= tishri1 - 177) {
609 if (inputDay > tishri1 - 30) {
611 *pDay = inputDay - tishri1 + 30;
612 }
else if (inputDay > tishri1 - 60) {
614 *pDay = inputDay - tishri1 + 60;
615 }
else if (inputDay > tishri1 - 89) {
617 *pDay = inputDay - tishri1 + 89;
618 }
else if (inputDay > tishri1 - 119) {
620 *pDay = inputDay - tishri1 + 119;
621 }
else if (inputDay > tishri1 - 148) {
623 *pDay = inputDay - tishri1 + 148;
626 *pDay = inputDay - tishri1 + 178;
632 *pDay = inputDay - tishri1 + 207;
643 *pDay = inputDay - tishri1 + 207;
658 tishri1After = tishri1;
659 FindTishriMolad(day - 365,
660 &metonicCycle, &metonicYear, &day, &halakim);
661 tishri1 = Tishri1(metonicYear, day, halakim);
665 yearLength = tishri1After - tishri1;
666 day = inputDay - tishri1 - 29;
667 if (yearLength == 355 || yearLength == 385) {
711 int lengthOfAdarIAndII;
713 if (year <= 0 || day <= 0 || day > 30) {
720 FindStartOfYear(year, &metonicCycle, &metonicYear,
721 &moladDay, &moladHalakim, &tishri1);
723 sdn = tishri1 + day - 1;
725 sdn = tishri1 + day + 29;
733 FindStartOfYear(year, &metonicCycle, &metonicYear,
734 &moladDay, &moladHalakim, &tishri1);
740 tishri1After = Tishri1((metonicYear + 1) % 19, moladDay, moladHalakim);
742 yearLength = tishri1After - tishri1;
744 if (yearLength == 355 || yearLength == 385) {
745 sdn = tishri1 + day + 59;
747 sdn = tishri1 + day + 58;
756 FindStartOfYear(year + 1, &metonicCycle, &metonicYear,
757 &moladDay, &moladHalakim, &tishri1After);
760 lengthOfAdarIAndII = 29;
762 lengthOfAdarIAndII = 59;
766 sdn = tishri1After + day - lengthOfAdarIAndII - 237;
767 }
else if (month == 5) {
768 sdn = tishri1After + day - lengthOfAdarIAndII - 208;
770 sdn = tishri1After + day - lengthOfAdarIAndII - 178;
776 FindStartOfYear(year + 1, &metonicCycle, &metonicYear,
777 &moladDay, &moladHalakim, &tishri1After);
781 sdn = tishri1After + day - 207;
784 sdn = tishri1After + day - 178;
787 sdn = tishri1After + day - 148;
790 sdn = tishri1After + day - 119;
793 sdn = tishri1After + day - 89;
796 sdn = tishri1After + day - 60;
799 sdn = tishri1After + day - 30;
const int monthsPerYear[19]
const char *const JewishMonthNameLeap[14]
#define NEW_MOON_OF_CREATION
const char *const JewishMonthHebName[14]
const char *const JewishMonthHebNameLeap[14]
#define JEWISH_SDN_OFFSET
zend_long JewishToSdn(int year, int month, int day)
void SdnToJewish(zend_long sdn, int *pYear, int *pMonth, int *pDay)
#define HALAKIM_PER_METONIC_CYCLE
const char *const JewishMonthName[14]
#define HALAKIM_PER_LUNAR_CYCLE