@brightsoftware/date-np
Version:
Simple & minimal Nepali date picker that just works.
43 lines (42 loc) • 1.33 kB
JavaScript
import { BS_MONTHS as s, MAX_BS_YEAR as l, MIN_BS_YEAR as a, MIN_AD_YEAR as D } from "../data/constants.js";
import { NepaliDate as c } from "../src/NepaliDate.js";
import f from "./Errors.js";
import { calcTotalDaysFromMinAD as A } from "./helpers.js";
import { isValidADRange as _ } from "./validators.js";
const m = (t, r, e) => !(r < 0 || r > 11 || t < a || t > l || e < 1 || e > s[t][r] || t === a && r === 8 && e < 17), u = (t, r, e) => {
let o = e;
if (t < a || t > l)
throw f.INVALID_BS_YEAR;
for (let n = 0; n < r; n++)
o += s[t][n];
if (t === Number(a))
return o;
for (let n = a; n < t; n++)
for (let i = 0; i < 12; i++)
o += s[n][i];
return o - 293;
}, S = (t) => {
let r = a, e = 9, o = 18, n = s[r][e];
for (let i = 0; i < t; i++)
if (o++, !(o <= n)) {
if (e != 11 ? e++ : (e = 0, r++), r > l)
break;
n = s[r][e], o = 1;
}
return { year: r, month: e, date: o };
}, p = (t) => {
const r = t.getFullYear(), e = t.getMonth(), o = t.getDate();
if (!m(r, e, o))
throw f.INVALID_BS_DATE_RANGE;
const n = u(r, e, o);
return new Date(D, 1, n);
}, M = (t) => {
if (!_(t))
throw f.INVALID_AD_DATE_RANGE;
const e = A(t), o = S(e);
return new c(o.year, o.month, o.date);
};
export {
M as convertFromADToBS,
p as convertFromBSToAD
};