bizcalendar
v1.0.2
Published
Bikram Sambat calendar for React — accurate conversion, no drift.
Maintainers
Readme
bizcalendar
A fully data-driven Bikram Sambat (BS) date picker and conversion library for React and Node.js.
Why this exists
This package stores the ACTUAL number of days for every month from BS 2000 to BS 2099, verified against the official Nepal government almanac. Conversion counts days from a fixed epoch — never by formula. No drift. No edge-case bugs.
Install
npm install bizcalendar
Requires React 17+ for the component. Conversion utilities work in any JS/TS environment.
React Component
import { NepaliDatePicker } from "bizcalendar";
<NepaliDatePicker value={date} onChange={(bs, adJSDate) => setDate(bs)} locale="ne" showAdDate={true} showToday={true} size="middle" />
Props: value BSDate | null Controlled value defaultValue BSDate Uncontrolled default onChange (bs, ad) => void Called on selection locale "en" | "ne" Language (default "en") format string Input format (default "YYYY/MM/DD") showToday boolean Today footer button (default true) showAdDate boolean AD day in cells (default false) disabled boolean Disable the picker disabledDate (bs) => boolean Disable specific dates minDate BSDate Min selectable date maxDate BSDate Max selectable date size "small"|"middle"|"large" Input size
Conversion Utilities
import { adToBS, bsToAD, bsToJSDate, todayBS, getDaysInMonth, formatBSDate, parseBSDate, addMonths, addYears, compareBSDates, } from "bizcalendar";
adToBS({ year: 2025, month: 5, day: 9 }) // { year: 2082, month: 1, day: 26 }
bsToAD({ year: 2082, month: 1, day: 26 }) // { year: 2025, month: 5, day: 9 }
bsToJSDate({ year: 2082, month: 1, day: 1 }) // native JS Date
todayBS() // today in BS
getDaysInMonth(2081, 9) // 29 (months have 29-32 days)
formatBSDate({ year: 2081, month: 5, day: 7 }) // "2081/05/07"
formatBSDate({ year: 2081, month: 5, day: 7 }, "YYYY/MM/DD", "ne") // "२०८१/०५/०७"
parseBSDate("2081/05/07") // { year: 2081, month: 5, day: 7 } parseBSDate("२०८१-०५-०७") // { year: 2081, month: 5, day: 7 } parseBSDate("bad") // null
addMonths({ year: 2081, month: 12, day: 1 }, 1) // { year: 2082, month: 1, day: 1 }
compareBSDates(a, b) // negative / 0 / positive
How conversion works
- The exact days in every BS month for 100 years is stored as a table.
- Epoch anchor: BS 2000/1/1 = AD 1943-04-14 (Wednesday). Fixed, verified.
- AD->BS: compute day offset from epoch, walk the table.
- BS->AD: walk the table to get offset, add to epoch. No formula. No approximation. Every date in range is provably correct.
Supported range
BS 2000 – BS 2099 (AD 1943 – AD 2043)
License
MIT
