Skip to main content

BanglaCalendar - Bengali Date Manipulation

BanglaCalendar​

The BanglaCalendar class provides utilities for handling dates in the Bengali calendar system. It supports creation, manipulation, and conversion between Bengali and Gregorian calendars with two variants: 'revised-2019' (default) and 'revised-1966'.

Import​

import { BanglaCalendar } from 'nhb-toolbox';
// or
import { BanglaCalendar } from 'nhb-toolbox/bn-calendar';

Constructor​

Creates a new BanglaCalendar instance from various input formats.

Constructor Signatures​

Signature 1: From current date with optional configuration

constructor(config?: BnCalendarConfig)

Signature 2: From Bangla or Gregorian date string

constructor(date: string, config?: BnCalendarConfig)

Signature 3: From Date object

constructor(date: Date, config?: BnCalendarConfig)

Signature 4: From timestamp or Bangla year (Latin digits)

constructor(tsOrBnYear: number, config?: BnCalendarConfig)

Signature 5: From Bangla year (Bangla digits)

constructor(bnYear: BanglaYear, config?: BnCalendarConfig)

Signature 6: From Bangla year and month (Latin digits)

constructor(bnYear: number, bnMonth: NumberRange<1, 12>, config?: BnCalendarConfig)

Signature 7: From Bangla year and month (Bangla digits)

constructor(bnYear: BanglaYear, bnMonth: BanglaMonth, config?: BnCalendarConfig)

Signature 8: From Bangla year, month, and day (Latin digits)

constructor(
bnYear: number,
bnMonth: NumberRange<1, 12>,
bnDate: NumberRange<1, 31>,
config?: BnCalendarConfig
)

Signature 9: From Bangla year, month, and day (Bangla digits)

constructor(
bnYear: BanglaYear,
bnMonth: BanglaMonth,
bnDate: BanglaDate,
config?: BnCalendarConfig
)

Parameters​

  • date: Various date formats including Bangla date strings, Gregorian date strings, Date objects, timestamps, or individual date components
  • bnYear: Bengali year in either Bangla (০-৯৯৯৯) or Latin (0-9999) digits
  • bnMonth: Bengali month (1-12 or ১-১২)
  • bnDate: Bengali day of month (1-31 or ১-৩১)
  • config: Optional configuration object with variant property ('revised-2019' or 'revised-1966')

Behavior​

  • Automatically detects input format and parses accordingly
  • Defaults to current date if no valid input is provided
  • Uses 'revised-2019' variant by default
  • Validates all date components
  • Handles leap years according to the selected variant

Examples​

// Current date
new BanglaCalendar();

// From Bangla date string
new BanglaCalendar('১৪৩২-১১-০৮');

// From Gregorian date string
new BanglaCalendar('2023-04-14');

// From Date object
new BanglaCalendar(new Date('2023-04-14'));

// From Bangla year, month, date (Latin)
new BanglaCalendar(1430, 1, 1);

// From Bangla year, month, date (Bangla)
new BanglaCalendar('১৪৩০', '১', '১');

// With specific variant
new BanglaCalendar('১৪৩০', '১', '১', { variant: 'revised-1966' });

Available Methods​


Properties​

variant​

readonly variant: BnCalendarVariant

The calendar variant being used ('revised-2019' or 'revised-1966').

Example:

const cal2019 = new BanglaCalendar(); // Default: 'revised-2019'
console.log(cal2019.variant); // 'revised-2019'

const cal1966 = new BanglaCalendar({ variant: 'revised-1966' });
console.log(cal1966.variant); // 'revised-1966'

// Different leap year behavior
console.log(cal2019.isLeapYear()); // Follows Gregorian rules
console.log(cal1966.isLeapYear()); // Follows Bangla year % 4 === 2 rule

year​

readonly year: Readonly<{
bn: BanglaYear; // Bangla year in Bangla digits
en: number; // Bangla year in Latin digits
}>

Example:

const bnCal = new BanglaCalendar('১৪৩০-০১-০১');
console.log(bnCal.year.bn); // '১৪৩০' (Bangla digits)
console.log(bnCal.year.en); // 1430 (Latin digits)

// Type-safe access
const banglaYear: string = bnCal.year.bn; // Type: BanglaYear
const latinYear: number = bnCal.year.en; // Type: number

month​

readonly month: Readonly<{
bn: BanglaMonth; // Bangla month in Bangla digits (১-১২)
en: NumberRange<1, 12>; // Bangla month in Latin digits (1-12)
}>

Example:

const bnCal = new BanglaCalendar('১৪৩০-০৫-১৫'); // ভাদ্র ১৫
console.log(bnCal.month.bn); // '৫' (Bangla digits)
console.log(bnCal.month.en); // 5 (Latin digits, 1-based)

// Get month name to verify
console.log(bnCal.getMonthName()); // 'ভাদ্র'
console.log(bnCal.getMonthName('en')); // 'Bhadro'

// Type-safe access
const monthNumber: number = bnCal.month.en; // Type: NumberRange<1, 12>

date​

readonly date: Readonly<{
bn: BanglaDate; // Bangla day of month in Bangla digits (১-৩১)
en: NumberRange<1, 31>; // Bangla day of month in Latin digits (1-31)
}>

Example:

const bnCal = new BanglaCalendar('১৪৩০-০৫-১৫'); // ১৫ ভাদ্র
console.log(bnCal.date.bn); // '১৫' (Bangla digits)
console.log(bnCal.date.en); // 15 (Latin digits)

// Type-safe access
const dayNumber: number = bnCal.date.en; // Type: NumberRange<1, 31>

gregorian​

readonly gregorian: Readonly<{
year: number; // Gregorian year
month: NumberRange<1, 12>; // Gregorian month (1-12)
date: NumberRange<1, 31>; // Gregorian day of month (1-31)
}>

Example:

const bnCal = new BanglaCalendar('১৪৩০-০১-০১'); // ১ বৈশাখ ১৪৩০
console.log(bnCal.gregorian.year); // 2023
console.log(bnCal.gregorian.month); // 4 (April)
console.log(bnCal.gregorian.date); // 14

// Verify conversion
const gregorianDate = bnCal.toDate();
console.log(gregorianDate); // Date: Fri Apr 14 2023 00:00:00 GMT+0000

// Conversion works both ways
const fromGregorian = new BanglaCalendar(new Date(2023, 3, 14)); // April 14, 2023
console.log(fromGregorian.toJSON()); // '১৪৩০-০১-০১'

weekDay​

readonly weekDay: Enumerate<7>

Day of the week (0-6, where 0 is Sunday/রবিবার).

Example:

const bnCal = new BanglaCalendar('১৪৩০-০১-০১'); // Friday, April 14, 2023
console.log(bnCal.weekDay); // 5 (Friday)

// Get day name to verify
console.log(bnCal.getDayName()); // 'শুক্রবার'
console.log(bnCal.getDayName('en')); // 'Shukrobar (Friday)'

// Check specific days
if (bnCal.weekDay === 0) {
console.log('It is Sunday (রবিবার)');
} else if (bnCal.weekDay === 5) {
console.log('It is Friday (শুক্রবার)');
}

isoWeekDay​

readonly isoWeekDay: NumberRange<1, 7>

ISO weekday (1 = Monday, 7 = Sunday).

Example:

const bnCal = new BanglaCalendar('১৪৩০-০১-০১'); // Friday, April 14, 2023
console.log(bnCal.isoWeekDay); // 5 (Friday in ISO format)

// Compare with weekDay
console.log(bnCal.weekDay); // 5 (0-based, Sunday=0)
console.log(bnCal.isoWeekDay); // 5 (1-based, Monday=1)

// Useful for ISO-compliant calculations
const isWeekend = bnCal.isoWeekDay >= 6; // Saturday or Sunday
console.log(isWeekend); // false (Friday is not weekend)

// ISO week starts on Monday
const mondayDate = bnCal.addDays(1 - bnCal.isoWeekDay); // Get Monday of the week
console.log(mondayDate.toJSON()); // Get Monday's date

Examples​

Basic Usage​

const today = new BanglaCalendar();
console.log(today.toString()); // "শুক্রবার, ১ বৈশাখ, ১৪৩০ [গ্রীষ্ম]"
console.log(today.toJSON()); // "১৪৩০-০১-০১"

const specificDate = new BanglaCalendar('১৪৩২-১১-০৮');
console.log(specificDate.getMonthName()); // "ফাল্গুন"

Date Conversion​

const bnDate = new BanglaCalendar('১৪৩০', '১', '১');
const gregorianDate = bnDate.toDate();
console.log(gregorianDate.toISOString()); // "2023-04-14T00:00:00.000Z"

Month Operations​

const date = new BanglaCalendar('১৪৩০', '৫', '১৫');
console.log(date.startOfMonth().toString()); // "১ জ্যৈষ্ঠ ১৪৩০"
console.log(date.endOfMonth().toString()); // "৩১ জ্যৈষ্ঠ ১৪৩০"

Aliases​

BanglaCalendar can also be imported using BnCalendar and Bongabdo aliases.


API Reference for BanglaCalendar​

valueOf()​

Gets the numeric timestamp (in milliseconds) for the current Bangla date.

Signature​

valueOf(): number

Return Value​

Unix timestamp in milliseconds representing the Gregorian equivalent of the current Bangla date.

Example​

const bnCal = new BanglaCalendar('১৪৩০', '১', '১');
const timestamp = bnCal.valueOf(); // 1681430400000 (equivalent to April 14, 2023)

Remarks​

  • Internally calls toDate().getTime() to convert the Bangla date to Gregorian and get its timestamp
  • The time component is normalized to midnight UTC during conversion
  • This method is automatically called when the instance is used in numeric contexts

isLeapYear()​

Checks if the current Bangla year is a leap year according to the selected calendar variant.

Signature​

isLeapYear(): boolean

Return Value​

true if the year is a leap year, false otherwise.

Example​

const date = new BanglaCalendar(1430, 1, 1);
const isLeap = date.isLeapYear(); // false

Remarks​

  • Revised-2019: Follows Gregorian leap year rules (divisible by 4, not by 100 unless also divisible by 400)
  • Revised-1966: Leap year when bnYear % 4 === 2

toDate()​

Converts the Bangla calendar date to a JavaScript Date object.

Signature​

toDate(): Date

Return Value​

Gregorian Date object equivalent to the Bangla date.

Example​

const bnDate = new BanglaCalendar('১৪৩০', '১', '১');
const gregorianDate = bnDate.toDate(); // Date for April 14, 2023

Remarks​

  • Time component is always set to 00:00:00 in UTC
  • Accounts for calendar variant and leap year rules

getSeasonName()​

Gets the Bangla season name for the current date.

Signature​

getSeasonName<Locale extends $BnEn = 'bn'>(locale?: Locale): BanglaSeasonName<Locale>

Parameters​

  • locale: Output locale ('bn' for Bengali, 'en' for English). Defaults to 'bn'.

Return Value​

Name of the season in the specified locale.

Example​

const bnCal = new BanglaCalendar('2023-04-14');
bnCal.getSeasonName(); // "গ্রীষ্ম"
bnCal.getSeasonName('en'); // "Grisma (Summer)"

Seasons​

  • গ্রীষ্ম (Summer): Mid-April to Mid-June
  • বর্ষা (Monsoon): Mid-June to Mid-August
  • শরৎ (Autumn): Mid-August to Mid-October
  • হেমন্ত (Late Autumn): Mid-October to Mid-December
  • শীত (Winter): Mid-December to Mid-February
  • বসন্ত (Spring): Mid-February to Mid-April

getMonthName()​

Gets the Bangla name of the month for the current date.

Signature​

getMonthName<Locale extends $BnEn = 'bn'>(locale?: Locale): BanglaMonthName<Locale>

Parameters​

  • locale: Output locale ('bn' for Bengali, 'en' for English). Defaults to 'bn'.

Return Value​

Name of the month in the specified locale.

Example​

const bnCal = new BanglaCalendar('2023-04-14');
bnCal.getMonthName(); // "বৈশাখ"
bnCal.getMonthName('en'); // "Boishakh"

getDayName()​

Gets the Bangla name of the weekday for the current date.

Signature​

getDayName<Locale extends $BnEn = 'bn'>(locale?: Locale): BanglaDayName<Locale>

Parameters​

  • locale: Output locale ('bn' for Bengali, 'en' for English). Defaults to 'bn'.

Return Value​

Name of the weekday in the specified locale.

Example​

const bnCal = new BanglaCalendar('2023-04-14'); // Friday
bnCal.getDayName(); // "শুক্রবার"
bnCal.getDayName('en'); // "Shukrobar (Friday)"

startOfMonth()​

Gets a new BanglaCalendar instance representing the first day of the current month.

Signature​

startOfMonth(): BanglaCalendar

Return Value​

A BanglaCalendar instance set to the 1st day of the current month.

Example​

const bnCal = new BanglaCalendar('১৪৩০', '৫', '১৫');
const startOfMonth = bnCal.startOfMonth(); // ১ জ্যৈষ্ঠ ১৪৩০

Remarks​

  • Preserves the calendar variant of the original
  • Time component is set to midnight UTC

endOfMonth()​

Gets a new BanglaCalendar instance representing the last day of the current month.

Signature​

endOfMonth(): BanglaCalendar

Return Value​

A BanglaCalendar instance set to the last day of the current month.

Example​

const bnCal = new BanglaCalendar('১৪৩০', '৫', '১৫');
const endOfMonth = bnCal.endOfMonth(); // ৩১ জ্যৈষ্ঠ ১৪৩০

Remarks​

  • Accounts for month length variations (29/30/31 days)
  • Includes leap year adjustments

startOfYear()​

Gets a new BanglaCalendar instance representing the first day of the current year (১ বৈশাখ).

Signature​

startOfYear(): BanglaCalendar

Return Value​

A BanglaCalendar instance set to ১ বৈশাখ of the current year.

Example​

const bnCal = new BanglaCalendar('১৪৩০', '৫', '১৫');
const startOfYear = bnCal.startOfYear(); // ১ বৈশাখ ১৪৩০

endOfYear()​

Gets a new BanglaCalendar instance representing the last day of the current year (৩০ চৈত্র).

Signature​

endOfYear(): BanglaCalendar

Return Value​

A BanglaCalendar instance set to ৩০ চৈত্র of the current year.

Example​

const bnCal = new BanglaCalendar('১৪৩০', '৫', '১৫');
const endOfYear = bnCal.endOfYear(); // ৩০ চৈত্র ১৪৩০

daysInMonth()​

Gets the number of days in a Bangla month.

Signature​

daysInMonth(month?: NumberRange<1, 12>): NumberRange<29, 31>

Parameters​

  • month: Optional Bangla month (1-12 in Latin digits). If not provided, uses the current month.

Return Value​

Number of days in the specified month (29, 30, or 31).

Example​

const bnCal = new BanglaCalendar('১৪৩০', '১', '১');
bnCal.daysInMonth(); // 31 (বৈশাখ has 31 days)
bnCal.daysInMonth(12); // 30 (চৈত্র has 30 days)

toJSON()​

Returns a string representation of the Bangla date in ISO-like format (YYYY-MM-DD with Bangla digits).

Signature​

toJSON(): string

Return Value​

Bangla date string in the format: "YYYY-MM-DD" (e.g., "১৪৩০-০১-০১").

Example​

const bnCal = new BanglaCalendar('2023-04-14');
console.log(bnCal.toJSON()); // "১৪৩০-০১-০১"

Remarks​

  • Automatically called by JSON.stringify()
  • Output follows: "বছর-মাস-দিন" with zero-padded Bangla digits

toString()​

Returns a string representation of the Bangla date in Bengali format.

Signature​

toString(): string

Return Value​

Bangla date string in the format: "শুক্রবার, ১৫ জ্যৈষ্ঠ, ১৪৩০ [গ্রীষ্ম]".

Example​

const bnCal = new BanglaCalendar('2023-04-14');
console.log(bnCal.toString()); // "শুক্রবার, ১ বৈশাখ, ১৪৩০ [গ্রীষ্ম]"

Remarks​


toStringEn()​

Returns a string representation of the Bangla date in English/Latin format.

Signature​

toStringEn(): string

Return Value​

Bangla date string in the format: "Shukrobar (Friday), 15 Joishtho, 1430 [Grisma (Summer)]".

Example​

const bnCal = new BanglaCalendar('2023-04-14');
console.log(bnCal.toStringEn()); // "Shukrobar (Friday), 1 Boishakh, 1430 [Grisma (Summer)]"

format()​

Formats the current date as a Bangla calendar date string using customizable tokens.

Signature​

format(format?: BanglaDateFormat): string

Parameters​

  • format: Format string using tokens (default: 'ddd, DD mmmm (SS), YYYY বঙ্গাব্দ')

Return Value​

Formatted Bangla date string according to the specified format.

Examples​

const bnCal = new BanglaCalendar('2023-04-14');

bnCal.format();
// Returns: 'শুক্রবার, বৈশাখ ০১ (গ্রীষ্মকাল), ১৪৩০ বঙ্গাব্দ'

bnCal.format('YYYY-MM-DD');
// Returns: '১৪৩০-০১-০১'

bnCal.format('mmmm DD, YYYY');
// Returns: 'বৈশাখ ০১, ১৪৩০'

Format Tokens​

  • Year: YYYY/yyyy (full year), YY/yy (last 2 digits)
  • Month: M/MM (padded), mmm (short name), mmmm (full name)
  • Day: D/DD (padded), Do (cardinal)
  • Weekday: d (short), dd (without 'বার'), ddd (full)
  • Season: S (season), SS (season with 'কাল' suffix)

Escaping Text​

To output raw text (not interpreted as a token), wrap it in square brackets:

  • [আজ] ddd → আজ রবিবার
  • [year ]YYYY → year ২০২৫

addDays()​

Adds (or subtracts) days to (or from) the current Bangla date.

Signature​

addDays(days: number): BanglaCalendar

Parameters​

  • days: Number of days to add (negative values subtract days)

Return Value​

A new BanglaCalendar instance with the adjusted date.

Example​

const bnCal = new BanglaCalendar('১৪৩০', '১', '১'); // ১ বৈশাখ ১৪৩০

// Add days
bnCal.addDays(7); // ৮ বৈশাখ ১৪৩০
bnCal.addDays(35); // ৫ জ্যৈষ্ঠ ১৪৩০

// Subtract days
bnCal.addDays(-3); // ২৮ চৈত্র ১৪২৯

// Cross year boundary
const lateDate = new BanglaCalendar('১৪৩০', '১২', '২৫');
lateDate.addDays(10); // ৫ বৈশাখ ১৪৩১

Remarks​

  • Preserves the calendar variant of the original instance
  • Handles month and year transitions automatically
  • Accounts for varying month lengths and leap years
  • Negative values subtract days from the current date
  • Time component remains at midnight UTC

addWeeks()​

Adds (or subtracts) weeks to (or from) the current Bangla date.

Signature​

addWeeks(weeks: number): BanglaCalendar

Parameters​

  • weeks: Number of weeks to add (negative values subtract weeks)

Return Value​

A new BanglaCalendar instance with the adjusted date.

Example​

const bnCal = new BanglaCalendar('১৪৩০', '১', '১'); // ১ বৈশাখ ১৪৩০

// Add weeks
bnCal.addWeeks(2); // ১৫ বৈশাখ ১৪৩০
bnCal.addWeeks(5); // ৫ জ্যৈষ্ঠ ১৪৩০

// Subtract weeks
bnCal.addWeeks(-1); // ২৪ চৈত্র ১৪২৯

Remarks​

  • Each week is treated as exactly 7 days
  • Preserves the calendar variant of the original instance
  • Handles month and year transitions automatically
  • Useful for scheduling recurring weekly events
  • Negative values subtract weeks from the current date

addMonths()​

Adds (or subtracts) months to (or from) the current Bangla date.

Signature​

addMonths(months: number, overflow?: boolean): BanglaCalendar

Parameters​

  • months: Number of months to add (negative values subtract months)
  • overflow: Controls behavior when day doesn't exist in target month (default: true)
    • true: Invalid dates overflow to the next month
    • false: Clamps to the last valid day of the target month

Return Value​

A new BanglaCalendar instance with the adjusted date.

Example​

const normal = new BanglaCalendar('১৪৩০', '২', '১৫');
normal.addMonths(1); // ১৫ আষাঢ় ১৪৩০
normal.addMonths(1, false); // ১৫ আষাঢ় ১৪৩০

// Edge case: 31st doesn't exist in কার্তিক (30 days)
const edgeCase = new BanglaCalendar('১৪৩০', '৬', '৩১'); // ৩১ আশ্বিন ১৪৩০
edgeCase.addMonths(1); // ১ অগ্রহায়ণ ১৪৩০ (overflow)
edgeCase.addMonths(1, false); // ৩০ কার্তিক ১৪৩০ (clamped)

// Subtract months
edgeCase.addMonths(-1); // ১ আশ্বিন ১৪৩০
edgeCase.addMonths(-1, false); // ৩১ ভাদ্র ১৪৩০

Remarks​

  • When overflow=true (default): Follows JavaScript Date behavior where invalid dates overflow
  • When overflow=false: Clamps to the last valid day of the target month
  • Preserves the calendar variant of the original instance
  • Handles year transitions automatically
  • Negative values subtract months from the current date

addYears()​

Adds (or subtracts) years to (or from) the current Bangla date.

Signature​

addYears(years: number, overflow?: boolean): BanglaCalendar

Parameters​

  • years: Number of years to add (negative values subtract years)
  • overflow: Controls behavior for leap year adjustments (default: true)
    • true: Allows date overflow when day doesn't exist in target year
    • false: Clamps to last valid day of month in non-leap years

Return Value​

A new BanglaCalendar instance with the adjusted date.

Example​

const bnCal = new BanglaCalendar('১৪৩০', '১', '১৫'); // ১৫ বৈশাখ ১৪৩০

// Add years
bnCal.addYears(1); // ১৫ বৈশাখ ১৪৩১
bnCal.addYears(5); // ১৫ বৈশাখ ১৪৩৫

// Subtract years
bnCal.addYears(-1); // ১৫ বৈশাখ ১৪২৯

// Leap year adjustment
const leapDay = new BanglaCalendar('১৪৩১', '১১', '৩০'); // ৩০ ফাল্গুন ১৪৩১ (leap year)
leapDay.addYears(1, false); // ২৯ ফাল্গুন ১৪৩২ (non-leap year has 29 days)

Remarks​

  • Preserves the calendar variant of the original instance
  • Negative values subtract years from the current date
  • Year addition follows Bangla calendar years
  • The month and day generally remain the same unless affected by leap year rules
  • When overflow=false, dates in ফাল্গুন (month 11) are adjusted for leap year differences

$hasVariantConfig()​

Checks if a value is a configuration object that contains a valid calendar variant.

Signature​

$hasVariantConfig(value: unknown): value is { variant: BnCalendarVariant }

Parameters​

  • value: The value to check

Return Value​

true if the value contains a valid variant property, false otherwise.

Example​

const bnCal = new BanglaCalendar();

// Valid configuration objects
bnCal.$hasVariantConfig({ variant: 'revised-2019' }); // true
bnCal.$hasVariantConfig({ variant: 'revised-1966' }); // true

// Invalid configuration objects
bnCal.$hasVariantConfig({ variant: 'invalid' }); // false
bnCal.$hasVariantConfig({}); // false
bnCal.$hasVariantConfig(null); // false

Remarks​

  • This method is used internally by the constructor to extract variant configuration from various parameter positions
  • Can be useful for type-checking configuration objects before passing them to the constructor
  • Validates if the object has a variant property and it contains one of the 2 supported values: 'revised-2019' or 'revised-1966'

Static Methods​

isBanglaYear()​

Checks whether a value is a valid Bangla year in Bangla digits (০–৯৯৯৯).

Signature​

static isBanglaYear(value: unknown): value is BanglaYear

Example​

BanglaCalendar.isBanglaYear('১৪৩০'); // true
BanglaCalendar.isBanglaYear('১০০০০'); // false (too many digits)
BanglaCalendar.isBanglaYear('1430'); // false (Latin digits)

isBanglaYearEn()​

Checks whether a value is a valid Bangla year in Latin digits (0–9999).

Signature​

static isBanglaYearEn(value: number): boolean

Example​

BanglaCalendar.isBanglaYearEn(1430); // true
BanglaCalendar.isBanglaYearEn(10000); // false
BanglaCalendar.isBanglaYearEn(-1); // false

isBanglaMonth()​

Checks whether a value is a valid Bangla month in Bangla digits (১–১২).

Signature​

static isBanglaMonth(value: unknown): value is BanglaMonth

Example​

BanglaCalendar.isBanglaMonth('১'); // true
BanglaCalendar.isBanglaMonth('১২'); // true
BanglaCalendar.isBanglaMonth('১৩'); // false

isBanglaMonthEn()​

Checks whether a value is a valid Bangla month in Latin digits (1–12).

Signature​

static isBanglaMonthEn(value: unknown): value is NumberRange<1, 12>

Example​

BanglaCalendar.isBanglaMonthEn(1); // true
BanglaCalendar.isBanglaMonthEn(12); // true
BanglaCalendar.isBanglaMonthEn(13); // false

isBanglaDate()​

Checks whether a value is a valid Bangla date of month in Bangla digits (১–৩১).

Signature​

static isBanglaDate(value: unknown): value is BanglaDate

Example​

BanglaCalendar.isBanglaDate('১'); // true
BanglaCalendar.isBanglaDate('৩১'); // true
BanglaCalendar.isBanglaDate('৩২'); // false

isBanglaDateEn()​

Checks whether a value is a valid Bangla date of month in Latin digits (1–31).

Signature​

static isBanglaDateEn(value: unknown): value is NumberRange<1, 31>

Example​

BanglaCalendar.isBanglaDateEn(1); // true
BanglaCalendar.isBanglaDateEn(31); // true
BanglaCalendar.isBanglaDateEn(32); // false

isBanglaDateString()​

Checks whether a string follows the Bangla date format pattern (YYYY-MM-DD with Bangla digits).

Signature​

static isBanglaDateString(value: unknown): value is string

Example​

BanglaCalendar.isBanglaDateString('১৪৩০-০১-০১'); // true
BanglaCalendar.isBanglaDateString('1430-01-01'); // false (Latin digits)
BanglaCalendar.isBanglaDateString('১৪৩০-১৩-০১'); // false (invalid month)

Remarks​

  • Accepts both zero-padded and non-padded Bangla digits
  • Validates year, month, and date components separately

[Symbol.toPrimitive]​

Converts the BanglaCalendar instance to a primitive value based on the provided hint.

Signature​

[Symbol.toPrimitive](hint: string): string | number

Parameters​

  • hint: The conversion hint - either 'number' or 'string' (defaults to 'string')

Return Value​

  • If hint is 'number': Returns the timestamp (same as valueOf())
  • Otherwise: Returns the ISO-like Bangla date string (same as toJSON())

Behavior​

  • hint === 'number': Returns numeric timestamp via valueOf()
  • hint === 'string' or any other hint: Returns formatted string via toJSON()

Example​

const bnCal = new BanglaCalendar('১৪৩০', '১', '১');

// String context (default)
String(bnCal); // "১৪৩০-০১-০১"
`${bnCal}`; // "১৪৩০-০১-০১"

// Numeric context
+bunCal; // 1681430400000
bnCal * 1; // 1681430400000

// Using explicit hint
bnCal[Symbol.toPrimitive]('number'); // 1681430400000
bnCal[Symbol.toPrimitive]('string'); // "১৪৩০-০১-০১"
bnCal[Symbol.toPrimitive]('default'); // "১৪৩০-০১-০১"

Remarks​

  • This method enables implicit type conversion in JavaScript/TypeScript
  • Follows standard JavaScript object-to-primitive conversion protocol
  • Ensures predictable behavior in arithmetic operations and string concatenation

[Symbol.toStringTag]​

Provides a string tag used by Object.prototype.toString().

Signature​

get [Symbol.toStringTag](): string

Return Value​

ISO-like Bangla date string in the format "YYYY-MM-DD" with Bangla digits.

Example​

const bnCal = new BanglaCalendar('১৪৩০', '১', '১');

console.log(bnCal);
// BanglaCalendar [১৪৩০-০১-০১] {
// variant: 'revised-2019',
// year: { bn: '১৪৩০', en: 1430 },
// month: { bn: '১', en: 1 },
// date: { bn: '১', en: 1 },
// gregorian: { year: 2023, month: 4, date: 14 },
// weekDay: 5,
// isoWeekDay: 5
// }

Object.prototype.toString.call(bnCal); // "[object ১৪৩০-০১-০১]"

bnCal[Symbol.toStringTag]; // "১৪৩০-০১-০১"

Remarks​

  • Returns the same value as toJSON() method
  • Used by Object.prototype.toString() to identify the object type
  • Provides a human-readable representation in debugging contexts

Type Definitions​

LocaleCode​

type $BnEn = 'bn' | 'en'

Supported locale codes for Bangla calendar output.

BanglaYear​

type BanglaYear = BanglaDigit | `${$BnOnes}${BanglaDigit}` | `${$BnOnes}${BanglaDigit}${BanglaDigit}` | Repeat<BanglaDigit, 4>

Bangla year from ০-৯৯৯৯.

BanglaMonth​

type BanglaMonth = $BnOnes | $BnOnesPadded | '১০' | '১১' | '১২'

Bangla month from ১-১২.

BanglaDate​

type BanglaDate = $BnOnes | $BnOnesPadded | `১${BanglaDigit}` | `২${BanglaDigit}` | '৩০' | '৩১'

Bangla date of month from ১-৩১.

BnCalendarVariant​

type BnCalendarVariant = 'revised-2019' | 'revised-1966'

Calendar variant types.

BnCalendarConfig​

interface BnCalendarConfig {
variant?: BnCalendarVariant;
}

Configuration object for Bangla Calendar system.

BanglaDateFormat​

type BanglaDateFormat = LooseLiteral<DateFormatToken | DateWithSeasonToken>

Format tokens for Bangla date formatting.


See Also​