87 lines
3.5 KiB
JavaScript
87 lines
3.5 KiB
JavaScript
"use strict";
|
||
/*
|
||
* This file contains modifications to code from https://github.com/mhalshehri/hijri-converter
|
||
* that is licensed under the MIT license.
|
||
*
|
||
* Copyright (c) 2018 Mohammed H Alshehri (@mhalshehri) and contributors
|
||
*
|
||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
* of this software and associated documentation files (the 'Software'), to deal
|
||
* in the Software without restriction, including without limitation the rights
|
||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
* copies of the Software.
|
||
*
|
||
* The above copyright notice and this permission notice shall be included in all
|
||
* copies or substantial portions of the Software.
|
||
*
|
||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||
* SOFTWARE.
|
||
*
|
||
* This modified version of the Software is also licensed under the MIT license,
|
||
* and is subject to the same conditions as the original version of the Software.
|
||
*
|
||
* Copyright (c) 2023 Tabby FZ-LLC
|
||
*
|
||
* A copy of the license can be found in the LICENSE file at the root of this
|
||
* distribution.
|
||
*/
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.gregorianFromOrdinal = exports.gregorianToJulian = exports.hijriToJulian = exports.hijriDaysInMonth = void 0;
|
||
const ummalqura_1 = require("./ummalqura");
|
||
const julianDayHelpers_1 = require("./julianDayHelpers");
|
||
const dateHelpers_1 = require("./dateHelpers");
|
||
/**
|
||
* Return month’s index in ummalqura month starts
|
||
*/
|
||
function _monthIndex(year, month) {
|
||
const priorMonth = (year - 1) * 12 + month - 1;
|
||
const index = priorMonth - ummalqura_1.HIJRI_OFFSET;
|
||
return index;
|
||
}
|
||
/**
|
||
* Return number of days in month.
|
||
*/
|
||
function hijriDaysInMonth(year, month) {
|
||
const index = _monthIndex(year, month);
|
||
return ummalqura_1.MONTH_STARTS[index + 1] - ummalqura_1.MONTH_STARTS[index];
|
||
}
|
||
exports.hijriDaysInMonth = hijriDaysInMonth;
|
||
/**
|
||
* Return corresponding Julian day number (JDN) from Hijri date.
|
||
*/
|
||
function hijriToJulian(date) {
|
||
const index = _monthIndex(date.year, date.month);
|
||
const rjd = ummalqura_1.MONTH_STARTS[index] + date.day - 1;
|
||
const jdn = (0, julianDayHelpers_1.rjdToJdn)(rjd);
|
||
return jdn;
|
||
}
|
||
exports.hijriToJulian = hijriToJulian;
|
||
/**
|
||
* Return corresponding Julian day number (JDN) from Gregorian date.
|
||
*/
|
||
function gregorianToJulian(date) {
|
||
const y = date.year - 1;
|
||
const m = date.month;
|
||
const daysBeforeYear = y * 365 + Math.floor(y / 4) - Math.floor(y / 100) + Math.floor(y / 400);
|
||
const daysBeforeMonth = dateHelpers_1.DAYS_BEFORE_MONTH[m] + Number(m > 2 && (0, dateHelpers_1.isLeap)(date.year));
|
||
const don = daysBeforeYear + daysBeforeMonth + date.day;
|
||
const jdn = (0, julianDayHelpers_1.ordinalToJdn)(don);
|
||
return jdn;
|
||
}
|
||
exports.gregorianToJulian = gregorianToJulian;
|
||
/**
|
||
* Construct a date from a proleptic Gregorian ordinal.
|
||
* January 1 of year 1 is day 1. Only the year, month and day are
|
||
* non-zero in the result.
|
||
*/
|
||
function gregorianFromOrdinal(n) {
|
||
const [year, month, day] = (0, dateHelpers_1.ord2ymd)(n);
|
||
return { year, month, day };
|
||
}
|
||
exports.gregorianFromOrdinal = gregorianFromOrdinal;
|