/* * kollavarsham * http://kollavarsham.org * * Copyright (c) 2014-2023 The Kollavarsham Team * Licensed under the MIT license. */ /** * @module baseDate */ import { Calendar } from '../calendar'; const pad = function (num, size) { const s = `000000000${num}`; return s.substr(s.length - size); }; const masaNames = { [0]: { saka: 'Caitra ', saura: 'Mesa ', enMalayalam: 'Chingam ', mlMalayalam: 'ചിങ്ങം' }, [1]: { saka: 'Vaisakha ', saura: 'Vrsa ', enMalayalam: 'Kanni ', mlMalayalam: 'കന്നി' }, [2]: { saka: 'Jyaistha ', saura: 'Mithuna ', enMalayalam: 'Thulam ', mlMalayalam: 'തുലാം' }, [3]: { saka: 'Asadha ', saura: 'Karkata ', enMalayalam: 'Vrischikam', mlMalayalam: 'വൃശ്ചികം' }, [4]: { saka: 'Sravana ', saura: 'Simha ', enMalayalam: 'Dhanu ', mlMalayalam: 'ധനു' }, [5]: { saka: 'Bhadrapada', saura: 'Kanya ', enMalayalam: 'Makaram ', mlMalayalam: 'മകരം' }, [6]: { saka: 'Asvina ', saura: 'Tula ', enMalayalam: 'Kumbham ', mlMalayalam: 'കുംഭം' }, [7]: { saka: 'Karttika ', saura: 'Vrscika ', enMalayalam: 'Meenam ', mlMalayalam: 'മീനം' }, [8]: { saka: 'Margasirsa', saura: 'Dhanus ', enMalayalam: 'Medam ', mlMalayalam: 'മേടം' }, [9]: { saka: 'Pausa ', saura: 'Makara ', enMalayalam: 'Idavam ', mlMalayalam: 'ഇടവം' }, [10]: { saka: 'Magha ', saura: 'Kumbha ', enMalayalam: 'Mithunam ', mlMalayalam: 'മിഥുനം' }, [11]: { saka: 'Phalguna ', saura: 'Mina ', enMalayalam: 'Karkitakam', mlMalayalam: 'കർക്കടകം' } }; /** * Serves as the base class for both the {@link JulianDate} and * {@link KollavarshamDate} classes. * * **INTERNAL/PRIVATE** * * @class BaseDate * @constructor * @param year {Number} * @param month {Number} * @param day {Number} */ export class BaseDate { constructor(year = 0, month = 0, date = 0) { /** * The `Naksatra` (Star) for this instance of the date. **Set separately after an instance is created** * * @property naksatra * @type { { saka: String, enMalayalam: string, mlMalayalam: string } } */ this._naksatra = Calendar.naksatras[-1]; this.year = year; this.month = month; this.date = date; this.gregorianDate = new Date(); this.julianDay = -1; this.ahargana = -1; this.sauraMasa = -1; this.sauraDivasa = -1; } get naksatra() { return this._naksatra; // eslint-disable-line no-underscore-dangle } set naksatra(val) { this._naksatra = val; // eslint-disable-line no-underscore-dangle } /** * Returns the Saura Masa name for the current instance of date. * * @property sauraMasaName * @type {string} */ get sauraMasaName() { return BaseDate.getMasaName(this.sauraMasa).saura; } /** * Returns the weekday (in English) for the current instance of date. * * @property weekdayName * @type {string} */ get weekdayName() { return Calendar.julianDayToWeekday(this.julianDay).en; } /** * Returns the weekday (in Malayalam) for the current instance of date. * * @property mlWeekdayName * @type {string} */ get mlWeekdayName() { return Calendar.julianDayToWeekday(this.julianDay).ml; } /** * Converts the Date to a nicely formatted string with year, month and date * * @method toString * @for BaseDate * @type {string} */ toString() { return `${pad(this.year, 4)} ${pad(this.month, 2)} ${pad(this.date, 2)}`; } /** * Returns the month names object that has Saka, Saura and Kollavarsham (English & Malayalam) month names for the specified index `masaNumber` * * @method getMasaName * @for BaseDate * @param masaNumber {Number} * @returns { {saka : {string}, saura : {string}, enMalayalam : {string}, mlMalayalam : {string} } } */ static getMasaName(masaNumber) { return masaNames[masaNumber]; } }