UNPKG

bangla-date-utils

Version:

A utility package for converting and formatting dates in the Bangla calendar system with support for Bangla numerals.

171 lines (147 loc) 5.47 kB
import { convertGregorianToBangla, BanglaDate, BANGLA_MONTHS, BANGLA_SEASONS, BANGLA_WEEKDAYS } from "./banglaCalendar" // Re-export the constants export { BANGLA_MONTHS, BANGLA_SEASONS, BANGLA_WEEKDAYS, BanglaDate } // Define format options export type BanglaDateFormat = "full" | "medium" | "short" | "custom" // Helper to convert a number to Bangla numerals const banglaNumerals = ["০", "১", "২", "৩", "৪", "৫", "৬", "৭", "৮", "৯"] export const toBanglaNumerals = (num: number): string => { return num .toString() .split("") .map((digit) => banglaNumerals[Number.parseInt(digit)] || digit) .join("") } // Gregorian month names in Bangla const GREGORIAN_MONTHS_IN_BANGLA = [ "জানুয়ারি", "ফেব্রুয়ারি", "মার্চ", "এপ্রিল", "মে", "জুন", "জুলাই", "আগস্ট", "সেপ্টেম্বর", "অক্টোবর", "নভেম্বর", "ডিসেম্বর", ] /** * Format a Gregorian date in Bangla language * @param dateString Date string (e.g., "2023-05-14" or "2023-05-14T10:30:00Z") * @param format Format option for the output * @returns Formatted Gregorian date in Bangla language */ export const formatGregorianToBangla = (dateString: string, format: BanglaDateFormat = "medium"): string => { // Parse the date string const date = new Date(dateString) // Check if the date is valid if (isNaN(date.getTime())) { throw new Error(`Invalid date string: ${dateString}`) } const day = date.getDate() const month = date.getMonth() // 0-11 const year = date.getFullYear() // Convert to Bangla numerals const banglaDay = toBanglaNumerals(day) const banglaYear = toBanglaNumerals(year) const banglaMonthName = GREGORIAN_MONTHS_IN_BANGLA[month] // Format based on the requested format if (format === "full") { const weekday = getBanglaWeekday(date) return `${weekday}, ${banglaDay} ${banglaMonthName}, ${banglaYear}` } else if (format === "short") { return `${banglaDay}/${toBanglaNumerals(month + 1)}/${banglaYear}` } else { // medium format (default) return `${banglaDay} ${banglaMonthName}, ${banglaYear}` } } /** * Format a Bangla date as a string * @param banglaDate BanglaDate object * @param format Format string (e.g., 'full', 'medium', 'short') * @returns Formatted Bangla date string */ const formatBanglaDateString = ( banglaDate: BanglaDate, format: BanglaDateFormat = "medium", customFormat?: string, ): string => { const { date, month, year, monthName, season } = banglaDate const banglaDateNum = toBanglaNumerals(date) const banglaYear = toBanglaNumerals(year) if (format === "full") { return `${banglaDateNum} ${monthName} ${banglaYear} (${season})` } else if (format === "short") { return `${banglaDateNum}/${toBanglaNumerals(month)}/${banglaYear}` } else if (format === "custom" && customFormat) { // Handle custom format (placeholder for future implementation) // For now, return medium format return `${banglaDateNum} ${monthName} ${banglaYear}` } else { // medium format return `${banglaDateNum} ${monthName} ${banglaYear}` } } /** * Convert a date string to a Bangla calendar date string * @param dateString Date string (e.g., "2023-05-14" or "2023-05-14T10:30:00Z") * @param format Format option for the output * @param customFormat Custom format string (for future implementation) * @returns Formatted Bangla calendar date string */ export const convertToBanglaDate = ( dateString: string, format: BanglaDateFormat = "medium", customFormat?: string, ): string => { // Parse the date string const date = new Date(dateString) // Check if the date is valid if (isNaN(date.getTime())) { throw new Error(`Invalid date string: ${dateString}`) } // Convert to Bangla date const banglaDate = convertGregorianToBangla(date) // Format and return return formatBanglaDateString(banglaDate, format, customFormat) } /** * Get detailed Bangla calendar information from a date string * @param dateString Date string (e.g., "2023-05-14" or "2023-05-14T10:30:00Z") * @param format Format option for the formatted output * @param customFormat Custom format string (for future implementation) * @returns Object containing formatted string and Bangla date details */ export const getBanglaDateDetails = ( dateString: string, format: BanglaDateFormat = "medium", customFormat?: string, ): { formatted: string; details: BanglaDate } => { // Parse the date string const date = new Date(dateString) // Check if the date is valid if (isNaN(date.getTime())) { throw new Error(`Invalid date string: ${dateString}`) } // Convert to Bangla date const banglaDate = convertGregorianToBangla(date) // Format the date const formatted = formatBanglaDateString(banglaDate, format, customFormat) // Return both the formatted string and the details return { formatted, details: banglaDate, } } /** * Get the Bangla weekday name for a given date * @param date JavaScript Date object * @returns Bangla weekday name */ const getBanglaWeekday = (date: Date): string => { const day = date.getDay() return BANGLA_WEEKDAYS[day] }