UNPKG

nhb-toolbox

Version:

A versatile collection of smart, efficient, and reusable utility functions, classes and types for everyday development needs.

99 lines (98 loc) 4.51 kB
import { digitToBangla } from '../../number/convert.js'; import { BN_DAYS, BN_MONTHS, INTERNALS } from '../constants.js'; import { _bnDaysMonthIdx, _formatDateCore, _getBnSeason, _getBnYear, _isBnLeapYear, _padShunno, } from '../helpers.js'; export const banglaPlugin = ($Chronos) => { const { internalDate: $Date } = $Chronos[INTERNALS]; const DEFAULT_CONFIG = new Map(); function $bnDaysMonthIdx(date, variant) { return _bnDaysMonthIdx(date, variant ?? DEFAULT_CONFIG.get('config')?.variant); } $Chronos.prototype.configureBanglaCalendar = (configs) => { DEFAULT_CONFIG.set('config', configs); }; $Chronos.prototype.getBanglaYear = function (locale = 'bn') { const bnYear = _getBnYear($Date(this)); return (locale === 'en' ? bnYear : digitToBangla(bnYear)); }; $Chronos.prototype.getBanglaMonth = function (options) { const { locale = 'bn', variant } = options ?? {}; const isoMonth = $bnDaysMonthIdx($Date(this), variant).monthIdx + 1; return (locale === 'en' ? isoMonth : digitToBangla(isoMonth)); }; $Chronos.prototype.getBanglaDay = function (options) { const { locale = 'bn', variant } = options ?? {}; const date = $bnDaysMonthIdx($Date(this), variant).days + 1; return (locale === 'en' ? date : digitToBangla(date)); }; $Chronos.prototype.getBanglaDayName = function (locale = 'bn') { const DAY = BN_DAYS[this.weekDay]; return (locale === 'en' ? DAY.en : DAY.bn); }; $Chronos.prototype.getBanglaMonthName = function (options) { const { locale = 'bn', variant } = options ?? {}; const { monthIdx } = $bnDaysMonthIdx($Date(this), variant); const MONTH = BN_MONTHS[monthIdx]; return (locale === 'en' ? MONTH.en : MONTH.bn); }; $Chronos.prototype.getBanglaSeasonName = function (options) { const { locale, variant } = options ?? {}; const { monthIdx } = $bnDaysMonthIdx($Date(this), variant); return _getBnSeason(monthIdx, locale); }; $Chronos.prototype.toBangla = function (opts) { return { year: this.getBanglaYear(opts?.locale), month: this.getBanglaMonth(opts), date: this.getBanglaDay(opts), monthName: this.getBanglaMonthName(opts), dayName: this.getBanglaDayName(opts?.locale), seasonName: this.getBanglaSeasonName(opts), isLeapYear: _isBnLeapYear(_getBnYear($Date(this)), this.year, opts?.variant), }; }; $Chronos.prototype.formatBangla = function (fmt, opts) { const { variant } = opts ?? {}; const { hour, minute, second, millisecond } = this; const D_NAME = BN_DAYS[this.weekDay]; const { monthIdx } = $bnDaysMonthIdx($Date(this), variant); const M_NAME = BN_MONTHS[monthIdx]; const month = this.getBanglaMonth({ variant }); const year = _padShunno(this.getBanglaYear(), 4); const date = this.getBanglaDay({ variant }); const seasonName = this.getBanglaSeasonName({ variant }); const offset = digitToBangla(this.getTimeZoneOffset()); const dateComponents = { YYYY: year, YY: year.slice(-2), yyyy: year, yy: year.slice(-2), M: month, MM: _padShunno(month), mmm: M_NAME.short, mmmm: M_NAME.bn, d: D_NAME.short, dd: D_NAME.bn.replace('বার', ''), ddd: D_NAME.bn, D: date, DD: _padShunno(date), Do: date, H: digitToBangla(hour), HH: _padShunno(digitToBangla(hour)), h: digitToBangla(hour % 12 || 12), hh: _padShunno(digitToBangla(hour % 12 || 12)), m: digitToBangla(minute), mm: _padShunno(digitToBangla(minute)), s: digitToBangla(second), ss: _padShunno(digitToBangla(second)), ms: digitToBangla(millisecond), mss: _padShunno(digitToBangla(millisecond), 3), a: hour < 12 ? 'পূর্বাহ্ণ' : 'অপরাহ্ণ', A: hour < 12 ? 'পূর্বাহ্ণ' : 'অপরাহ্ণ', Z: offset, ZZ: offset, S: seasonName, SS: `${seasonName}কাল`, }; return _formatDateCore(fmt || 'ddd, DD mmmm (SS), YYYY বঙ্গাব্দ - hh:mm:ss (A)', dateComponents); }; };