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 ]YYYYyear ২০২৫

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