nhb-toolbox 4.11.1 → 4.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chronos.js.map +1 -1
- package/dist/chronos.mjs.map +1 -1
- package/dist/chunk-nhb.js.map +1 -1
- package/dist/chunk-nhb.mjs.map +1 -1
- package/package.json +2 -1
package/dist/chronos.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/date/constants.ts","../src/date/Chronos.ts","../src/date/chronos-fn.ts"],"names":["__name","getOrdinal","isValidUTCOffSet","extractMinutesFromUTC","formatUTCOffset","isLeapYear","isPalindrome","formatUnitWithPlural","roundToNearest","chronos","isString"],"mappings":"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","file":"chronos.js","sourcesContent":["import type { DayPart, Hours, UTCOffSet } from './types';\n\nexport const DAYS = /* @__PURE__ */ Object.freeze([\n\t'Sunday',\n\t'Monday',\n\t'Tuesday',\n\t'Wednesday',\n\t'Thursday',\n\t'Friday',\n\t'Saturday',\n] as const);\n\nexport const MONTHS = /* @__PURE__ */ Object.freeze([\n\t'January',\n\t'February',\n\t'March',\n\t'April',\n\t'May',\n\t'June',\n\t'July',\n\t'August',\n\t'September',\n\t'October',\n\t'November',\n\t'December',\n] as const);\n\nexport const YEAR_FORMATS = /* @__PURE__ */ Object.freeze([\n\t'YYYY',\n\t'YY',\n\t'yyyy',\n\t'yy',\n] as const);\n\nexport const MONTH_FORMATS = /* @__PURE__ */ Object.freeze([\n\t'M',\n\t'MM',\n\t'mmm',\n\t'mmmm',\n] as const);\n\nexport const DATE_FORMATS = /* @__PURE__ */ Object.freeze([\n\t'DD',\n\t'D',\n\t'Do',\n] as const);\n\nexport const DAY_FORMATS = /* @__PURE__ */ Object.freeze([\n\t'd',\n\t'dd',\n\t'ddd',\n] as const);\n\nexport const HOUR_FORMATS = /* @__PURE__ */ Object.freeze([\n\t'H',\n\t'HH',\n\t'hh',\n\t'h',\n] as const);\n\nexport const MINUTE_FORMATS = /* @__PURE__ */ Object.freeze([\n\t'mm',\n\t'm',\n] as const);\n\nexport const SECOND_FORMATS = /* @__PURE__ */ Object.freeze([\n\t'ss',\n\t's',\n] as const);\n\nexport const MILLISECOND_FORMATS = /* @__PURE__ */ Object.freeze([\n\t'ms',\n\t'mss',\n] as const);\n\nexport const TIME_FORMATS = /* @__PURE__ */ Object.freeze(['a', 'A'] as const);\n\nexport const sortedFormats = /* @__PURE__ */ Object.freeze(\n\t[\n\t\t...YEAR_FORMATS,\n\t\t...MONTH_FORMATS,\n\t\t...DAY_FORMATS,\n\t\t...DATE_FORMATS,\n\t\t...HOUR_FORMATS,\n\t\t...MINUTE_FORMATS,\n\t\t...SECOND_FORMATS,\n\t\t...MILLISECOND_FORMATS,\n\t\t...TIME_FORMATS,\n\t].sort((a, b) => b.length - a.length),\n);\n\nexport const TIME_ZONES = /* @__PURE__ */ Object.freeze({\n\t// UTC -12:00 to -01:00 (Mostly Pacific Islands, Americas)\n\t/** International Date Line West (Baker Island, Howland Island) */\n\tIDLW: -12 * 60,\n\t/** Baker Island Time (Uninhabited) */\n\tBIT: -12 * 60,\n\t/** Samoa Standard Time (American Samoa, Midway) */\n\tSST: -11 * 60,\n\t/** Niue Time */\n\tNUT: -11 * 60,\n\t/** Hawaii-Aleutian Standard Time (USA-Hawaii) */\n\tHST: -10 * 60,\n\t/** Cook Island Time */\n\tCKT: -10 * 60,\n\t/** Tahiti Time (French Polynesia) */\n\tTAHT: -10 * 60,\n\t/** Alaska Standard Time (USA-Alaska) */\n\tAKST: -9 * 60,\n\t/** Gambier Time (French Polynesia) */\n\tGAMT: -9 * 60,\n\t/** Paraguay Time (Summer UTC-3) */\n\tPYT: -9 * 60,\n\t/** Marquesas Islands Time (UTC−09:30) */\n\tMART: -9.5 * 60,\n\t/** Hawaii-Aleutian Daylight Time (USA-Hawaii, DST) */\n\tHDT: -9 * 60,\n\t/** Pacific Standard Time (USA-West Coast, Canada) */\n\tPST: -8 * 60,\n\t/** Alaska Daylight Time (USA-Alaska, DST) */\n\tAKDT: -8 * 60,\n\t/** Mountain Standard Time (USA/Canada Rockies) */\n\tMST: -7 * 60,\n\t/** Mountain Daylight Time (USA/Canada Rockies, DST) */\n\tMDT: -6 * 60,\n\t/** Pacific Daylight Time (USA-West Coast, Canada, DST) */\n\tPDT: -7 * 60,\n\t/** Central Standard Time (USA/Canada Central) */\n\tCST: -6 * 60,\n\t/** Central Daylight Time (USA/Canada Central, DST) */\n\tCDT: -5 * 60,\n\t/** Easter Island Time (Chile) */\n\tEAST: -6 * 60,\n\t/** Eastern Standard Time (USA/Canada East Coast) */\n\tEST: -5 * 60,\n\t/** Eastern Daylight Time (USA/Canada East Coast, DST) */\n\tEDT: -4 * 60,\n\t/** Peru Time */\n\tPET: -5 * 60,\n\t/** Colombia Time */\n\tCOT: -5 * 60,\n\t/** Acre Time (Brazil-West) */\n\tACT: -5 * 60,\n\t/** Atlantic Standard Time (Canada-Maritime, Caribbean) */\n\tAST: -4 * 60,\n\t/** Bolivia Time */\n\tBOT: -4 * 60,\n\t/** Venezuelan Standard Time */\n\tVET: -4 * 60,\n\t/** Guyana Time */\n\tGYT: -4 * 60,\n\t/** Chile Standard Time */\n\tCLT: -4 * 60,\n\t/** Atlantic Daylight Time (Canada-Maritime, DST) */\n\tADT: -3 * 60,\n\t/** Brasília Time (Brazil-East) */\n\tBRT: -3 * 60,\n\t/** Argentina Time */\n\tART: -3 * 60,\n\t/** Uruguay Time */\n\tUYT: -3 * 60,\n\t/** Falkland Islands Summer Time */\n\tFKST: -3 * 60,\n\t/** Saint Pierre and Miquelon Standard Time */\n\tPMST: -3 * 60,\n\t/** Chile Summer Time (DST) */\n\tCLST: -3 * 60,\n\t/** French Guiana Time */\n\tGFT: -3 * 60,\n\t/** Newfoundland Standard Time */\n\tNST: -3.5 * 60,\n\t/** Newfoundland Daylight Time (DST) */\n\tNDT: -2.5 * 60,\n\t/** Fernando de Noronha Time (Brazil) */\n\tFNT: -2 * 60,\n\t/** South Georgia Time */\n\t'GST-South Georgia': -2 * 60,\n\t/** Brazil Summer Time (DST) */\n\tBRST: -2 * 60,\n\t/** Azores Time (Portugal) */\n\tAZOT: -1 * 60,\n\t/** Cape Verde Time */\n\tCVT: -1 * 60,\n\n\t// UTC ±00:00 (Europe, Africa, Greenland)\n\t/** Greenwich Mean Time (UK, Iceland, West Africa) */\n\tGMT: 0,\n\t/** Coordinated Universal Time */\n\tUTC: 0,\n\t/** Western European Time (Portugal, Morocco) */\n\tWET: 0,\n\t/** Eastern Greenland Summer Time */\n\tEGST: 0,\n\t/** Central European Time (France, Germany, Italy) */\n\tCET: 1 * 60,\n\t/** West Africa Time (Nigeria, Algeria) */\n\tWAT: 1 * 60,\n\t/** Middle European Time (Historical) */\n\tMET: 1 * 60,\n\t/** Western European Summer Time (Summer UTC+1) */\n\tWEST: 1 * 60,\n\t/** British Summer Time (UK DST) */\n\t'BST-UK': 1 * 60,\n\t/** Central European Summer Time (DST) */\n\tCEST: 2 * 60,\n\t/** Middle European Summer Time (DST) */\n\tMEST: 2 * 60,\n\n\t// UTC +02:00 to +05:00 (Europe, Africa, Middle East, Russia)\n\t/** Eastern European Time (Greece, Finland, Egypt) */\n\tEET: 2 * 60,\n\t/** Central Africa Time (Sudan, South Africa) */\n\tCAT: 2 * 60,\n\t/** South Africa Standard Time */\n\tSAST: 2 * 60,\n\t/** Israel Standard Time */\n\t'IST-ISRAEL': 2 * 60,\n\t/** Israel Daylight Time (DST) */\n\t'IST-IL': 2 * 60,\n\t/** Eastern European Summer Time */\n\tEEST: 3 * 60,\n\t/** Moscow Time (Russia-West) */\n\tMSK: 3 * 60,\n\t/** Syowa Time (Antarctica) */\n\tSYOT: 3 * 60,\n\t/** Arabia Standard Time (Iraq, Saudi Arabia) */\n\t'AST-ARAB': 3 * 60,\n\t/** East Africa Time (Kenya, Ethiopia) */\n\tEAT: 3 * 60,\n\t/** Iran Standard Time */\n\tIRST: 3.5 * 60,\n\t/** Iran Daylight Time (DST) */\n\tIRDT: 4.5 * 60,\n\t/** Armenia Time */\n\tAMT: 4 * 60,\n\t/** Georgia Time */\n\tGET: 4 * 60,\n\t/** Azerbaijan Time */\n\tAZT: 4 * 60,\n\t/** Mauritius Time */\n\tMUT: 4 * 60,\n\t/** Seychelles Time */\n\tSCT: 4 * 60,\n\t/** Gulf Standard Time (UAE, Oman) */\n\t'GST-GULF': 4 * 60,\n\t/** Samara Time (Russia) */\n\tSAMT: 4 * 60,\n\t/** Pakistan Standard Time */\n\tPKT: 5 * 60,\n\t/** Tajikistan Time */\n\tTJT: 5 * 60,\n\t/** Turkmenistan Time */\n\tTMT: 5 * 60,\n\t/** Uzbekistan Time */\n\tUZT: 5 * 60,\n\t/** Aqtobe Time (Kazakhstan) */\n\tAQTT: 5 * 60,\n\t/** Yekaterinburg Time (Russia) */\n\tYEKT: 5 * 60,\n\t/** Yekaterinburg Summer Time (Russia, DST) */\n\tYEKST: 5 * 60,\n\t/** India Standard Time */\n\t'IST-IN': 5.5 * 60,\n\n\t// UTC +05:30 to +09:00 (South Asia, Russia, Southeast Asia)\n\t/** Nepal Time (UTC+05:45) */\n\tNPT: 5.75 * 60,\n\t/** Nepal Time (alternative) */\n\t'NPT-NEPAL': 5.75 * 60,\n\t/** Bangladesh Time */\n\tBDT: 6 * 60,\n\t/** Bangladesh Standard Time */\n\t'BST-BD': 6 * 60,\n\t/** Bhutan Time */\n\tBTT: 6 * 60,\n\t/** Almaty Time (Kazakhstan) */\n\tALMT: 6 * 60,\n\t/** Omsk Time (Russia) */\n\tOMST: 6 * 60,\n\t/** Myanmar Time */\n\tMMT: 6.5 * 60,\n\t/** Cocos Islands Time */\n\tCCT: 6.5 * 60,\n\t/** Indochina Time (Thailand, Vietnam) */\n\tICT: 7 * 60,\n\t/** Thailand Standard Time */\n\tTHA: 7 * 60,\n\t/** Krasnoyarsk Time (Russia) */\n\tKRAT: 7 * 60,\n\t/** Western Indonesia Time (Jakarta) */\n\tWIB: 7 * 60,\n\t/** Hong Kong Time */\n\tHKT: 8 * 60,\n\t/** China Standard Time */\n\t'CST-CHINA': 8 * 60,\n\t/** Singapore Time */\n\tSGT: 8 * 60,\n\t/** Malaysia Time */\n\tMYT: 8 * 60,\n\t/** Philippines Time */\n\tPHT: 8 * 60,\n\t/** Irkutsk Time (Russia) */\n\tIRKT: 8 * 60,\n\t/** Irkutsk Daylight Time (Russia, DST) */\n\t'IRKT-DST': 9 * 60,\n\t/** Irkutsk Time (Russia, alternative) */\n\t'IRKT-RU': 8 * 60,\n\t/** Australian Western Standard Time */\n\tAWST: 8 * 60,\n\t/** Australian Central Western Standard Time (Eucla, UTC+08:45) */\n\tACWST: 8.75 * 60,\n\t/** Western Indonesia Time (Bali) */\n\tWITA: 8 * 60,\n\t/** Japan Standard Time */\n\tJST: 9 * 60,\n\t/** Korea Standard Time */\n\tKST: 9 * 60,\n\t/** Palau Time */\n\tPWT: 9 * 60,\n\t/** Yakutsk Time (Russia) */\n\tYAKT: 9 * 60,\n\t/** Eastern Indonesia Time (Jayapura) */\n\tWIT: 9 * 60,\n\n\t// UTC +09:30 to +14:00 (Australia, Pacific Islands, Russia)\n\t/** Australian Central Standard Time */\n\tACST: 9.5 * 60,\n\t/** Australian Central Daylight Time (DST) */\n\tACDT: 10.5 * 60,\n\t/** Australian Eastern Standard Time */\n\tAEST: 10 * 60,\n\t/** Australian Eastern Daylight Time (DST) */\n\tAEDT: 11 * 60,\n\t/** Vladivostok Time (Russia) */\n\tVLAT: 10 * 60,\n\t/** Lord Howe Standard Time (UTC+10:30) */\n\tLHST: 10.5 * 60,\n\t/** Lord Howe Daylight Time (DST +30min) */\n\tLHDT: 11 * 60,\n\t/** Sakhalin Time (Russia) */\n\tSAKT: 11 * 60,\n\t/** Magadan Time (Russia) */\n\tMAGT: 11 * 60,\n\t/** Norfolk Time (Australia) */\n\tNFT: 11 * 60,\n\t/** Chamorro Standard Time (Guam, Northern Mariana Islands) */\n\tCHST: 10 * 60,\n\t/** New Zealand Standard Time */\n\tNZST: 12 * 60,\n\t/** New Zealand Daylight Time (DST) */\n\tNZDT: 13 * 60,\n\t/** Fiji Time */\n\tFJT: 12 * 60,\n\t/** Tuvalu Time */\n\tTVT: 12 * 60,\n\t/** Chatham Standard Time (New Zealand) */\n\tCHAST: 12.75 * 60,\n\t/** Chatham Daylight Time (New Zealand, DST) */\n\tCHADT: 13.75 * 60,\n\t/** Chatham Standard Time (alternative) */\n\t'CHAST-NZ': 12.75 * 60,\n\t/** Phoenix Island Time (Kiribati) */\n\tPHOT: 13 * 60,\n\t/** Tokelau Time */\n\tTKT: 13 * 60,\n\t/** Tonga Time */\n\tTOT: 13 * 60,\n\t/** New Zealand Antarctica Time */\n\tNZAT: 13 * 60,\n\t/** Line Islands Time (Kiribati) */\n\tLINT: 14 * 60,\n\n\t// Antarctica (used in research stations)\n\t/** Rothera Time (Antarctica) */\n\tROTT: -3 * 60,\n\t/** Mawson Time (Antarctica) */\n\tMAWT: 5 * 60,\n\t/** Petropavlovsk-Kamchatsky Time (Russia) */\n\tPETT: 12 * 60,\n} as const);\n\nexport const TIME_ZONE_LABELS: Record<UTCOffSet, string> =\n\t/* @__PURE__ */ Object.freeze({\n\t\t'UTC-12:00': 'Baker Island Time', // and Howland Island\n\t\t// 'UTC-11:30': 'Niue Time',\n\t\t// 'UTC-11:00': 'Niue Time',\n\t\t'UTC-11:00': 'Samoa Standard Time',\n\t\t// 'UTC-10:30': 'Marquesas Time',\n\t\t'UTC-10:00': 'Hawaii-Aleutian Standard Time',\n\t\t'UTC-09:30': 'Marquesas Islands Time',\n\t\t'UTC-09:00': 'Alaskan Standard Time',\n\t\t// 'UTC-08:30': 'Pitcairn Standard Time',\n\t\t'UTC-08:00': 'Pacific Standard Time',\n\t\t'UTC-07:30': 'Mountain Standard Time (Unofficial)',\n\t\t'UTC-07:00': 'Mountain Standard Time',\n\t\t'UTC-06:30': 'Central America Time (Unofficial)',\n\t\t'UTC-06:00': 'Central Standard Time',\n\t\t// 'UTC-05:30': 'Venezuelan Standard Time (Historical)',\n\t\t'UTC-05:00': 'Eastern Standard Time',\n\t\t// 'UTC-04:30': 'Venezuelan Standard Time',\n\t\t'UTC-04:00': 'Atlantic Standard Time',\n\t\t'UTC-03:30': 'Newfoundland Standard Time',\n\t\t'UTC-03:00': 'SA Eastern Standard Time',\n\t\t'UTC-02:30': 'Mid-Atlantic Time (Unofficial)',\n\t\t'UTC-02:00': 'Mid-Atlantic Standard Time',\n\t\t'UTC-01:30': 'Azores Time (Unofficial)',\n\t\t'UTC-01:00': 'Cape Verde Time',\n\t\t'UTC+00:00': 'Greenwich Mean Time',\n\t\t'UTC+00:30': 'British Summer Time (Historical)',\n\t\t'UTC+01:00': 'Central European Standard Time',\n\t\t'UTC+01:30': 'Central Africa Time (Unofficial)',\n\t\t'UTC+02:00': 'Eastern European Standard Time',\n\t\t'UTC+02:30': 'Israel Standard Time (Historical)',\n\t\t'UTC+03:00': 'Arab Standard Time',\n\t\t'UTC+03:30': 'Iran Standard Time',\n\t\t'UTC+04:00': 'Gulf Standard Time',\n\t\t'UTC+04:30': 'Afghanistan Time',\n\t\t'UTC+05:00': 'Pakistan Standard Time',\n\t\t'UTC+05:30': 'India Standard Time',\n\t\t'UTC+05:45': 'Nepal Standard Time',\n\t\t'UTC+06:00': 'Bangladesh Standard Time',\n\t\t'UTC+06:30': 'Myanmar Standard Time',\n\t\t'UTC+07:00': 'Indochina Standard Time',\n\t\t'UTC+07:30': 'Western Indonesia Time (Unofficial)',\n\t\t'UTC+08:00': 'China Standard Time',\n\t\t'UTC+08:30': 'North Korea Standard Time',\n\t\t'UTC+08:45': 'South-Western Australia Standard Time',\n\t\t'UTC+09:00': 'Japan Standard Time',\n\t\t'UTC+09:30': 'Central Australia Standard Time',\n\t\t'UTC+10:00': 'Eastern Australia Standard Time',\n\t\t'UTC+10:30': 'Lord Howe Standard Time',\n\t\t'UTC+11:00': 'Central Pacific Standard Time',\n\t\t// 'UTC+11:30': 'Norfolk Island Time',\n\t\t'UTC+12:00': 'New Zealand Standard Time',\n\t\t'UTC+12:45': 'Chatham Islands Time',\n\t\t'UTC+13:00': 'Phoenix Island Time',\n\t\t'UTC+13:45': 'Tokelau Time (Unofficial)',\n\t\t'UTC+14:00': 'Line Islands Time',\n\t} as Record<UTCOffSet, string>);\n\n/** Ranges for day parts. */\nexport const DEFAULT_RANGES: Record<DayPart, [Hours, Hours]> =\n\t/* @__PURE__ */ Object.freeze({\n\t\tnight: ['21', '23'],\n\t\tmidnight: ['00', '01'],\n\t\tlateNight: ['02', '04'],\n\t\tmorning: ['05', '11'],\n\t\tafternoon: ['12', '16'],\n\t\tevening: ['17', '20'],\n\t} as const);\n\nexport const ZODIAC_SIGNS = /* @__PURE__ */ Object.freeze([\n\t['Capricorn', [1, 19]],\n\t['Aquarius', [2, 18]],\n\t['Pisces', [3, 20]],\n\t['Aries', [4, 19]],\n\t['Taurus', [5, 20]],\n\t['Gemini', [6, 20]],\n\t['Cancer', [7, 22]],\n\t['Leo', [8, 22]],\n\t['Virgo', [9, 22]],\n\t['Libra', [10, 22]],\n\t['Scorpio', [11, 21]],\n\t['Sagittarius', [12, 21]],\n\t['Capricorn', [12, 31]],\n] as const);\n","import { isString } from '../guards/primitives';\nimport type { LocaleCode } from '../number/types';\nimport { getOrdinal, roundToNearest } from '../number/utilities';\nimport { formatUnitWithPlural } from '../string/convert';\nimport { isPalindrome } from '../string/guards';\nimport {\n\tDAYS,\n\tDEFAULT_RANGES,\n\tMONTHS,\n\tsortedFormats,\n\tTIME_ZONE_LABELS,\n\tTIME_ZONES,\n\tZODIAC_SIGNS,\n} from './constants';\nimport { isLeapYear, isValidUTCOffSet } from './guards';\nimport type {\n\tChronosFormat,\n\tChronosInput,\n\tChronosMethods,\n\tChronosObject,\n\tDayPart,\n\tDayPartConfig,\n\tFormatOptions,\n\tQuarter,\n\tStrictFormat,\n\tTimeDuration,\n\tTimeParts,\n\tTimeUnit,\n\tTimeZone,\n\tUTCOffSet,\n\tZodiacSign,\n} from './types';\nimport { extractMinutesFromUTC, formatUTCOffset } from './utils';\n\n/**\n * * Creates a new immutable `Chronos` instance.\n *\n * **Note**: *If a date is provided **without a time component**, the instance will default to `00:00:00.000` UTC\n * and convert it to the **equivalent local time** using the current environment's UTC offset.*\n *\n * @param value - A date value (`number`, `string`, `Date`, or `Chronos` object).\n * - If a string is provided, it should be in a format that can be parsed by the Date constructor.\n * - If a number is provided, it should be a timestamp (milliseconds since the Unix epoch).\n * - If a Date object is provided, it will be used as is.\n * - If a Chronos object is provided, it will be converted to a Date object.\n *\n * **It also accepts number values as following:**\n * - **`year, month, date, hours, minutes, seconds, milliseconds`**: Individual components of a date-time to construct a `Chronos` instance.\n * - **`year`**: A number representing the year. If the year is between 0 and 99, it will be assumed to be the year 1900 + the provided year.\n * - **`month`**: A number between 1 and 12 representing the month (1 for January, 12 for December). It is adjusted internally to a 0-based index (0 for January, 11 for December).\n * - **`date`**: A number between 1 and 31 representing the day of the month.\n * - **`hours`**: A number between 0 and 23 representing the hour of the day.\n * - **`minutes`**: A number between 0 and 59 representing the minutes past the hour.\n * - **`seconds`**: A number between 0 and 59 representing the seconds past the minute.\n * - **`milliseconds`**: A number between 0 and 999 representing the milliseconds past the second.\n *\n * @returns Instance of `Chronos` with all methods and properties.\n */\nexport /* @__PURE__ */ class Chronos {\n\treadonly #date: Date;\n\t#offset: UTCOffSet;\n\t#ORIGIN: ChronosMethods | 'root';\n\t/** Chronos date/time in Native JS `Date` format */\n\tnative: Date;\n\t/** Origin of the `Chronos` instance (Method that created `new Chronos`), useful fo tracking instance. */\n\torigin: ChronosMethods | 'root';\n\n\t/**\n\t * * Creates a new immutable `Chronos` instance.\n\t *\n\t * Accepts no arguments (defaults to now).\n\t *\n\t * @returns Instance of `Chronos` with all methods and properties.\n\t */\n\tconstructor();\n\n\t/**\n\t * * Creates a new immutable `Chronos` instance.\n\t *\n\t * @param value - A date value in `number`, it should be a timestamp (milliseconds since the Unix epoch).\n\t *\n\t * @returns Instance of `Chronos` with all methods and properties.\n\t */\n\tconstructor(value: number);\n\n\t/**\n\t * * Creates a new immutable `Chronos` instance.\n\t *\n\t * **Note**: *If a date is provided **without a time component**, the instance will default to `00:00:00.000` UTC\n\t * and convert it to the **equivalent local time** using the current environment's UTC offset.*\n\t *\n\t * @param value - A date value in `string`, it should be in a format that can be parsed by the `Date` constructor.\n\t *\n\t * @returns Instance of `Chronos` with all methods and properties.\n\t */\n\tconstructor(value: string);\n\n\t/**\n\t * * Creates a new immutable `Chronos` instance.\n\t *\n\t * **Note**: *If a date is provided **without a time component**, the instance will default to `00:00:00.000` UTC\n\t * and convert it to the **equivalent local time** using the current environment's UTC offset.*\n\t *\n\t * @param value - A date value as `Date` object, it will be used as is.\n\t *\n\t * @returns Instance of `Chronos` with all methods and properties.\n\t */\n\tconstructor(value: Date);\n\n\t/**\n\t * * Creates a new immutable `Chronos` instance.\n\t *\n\t * **Note**: *If a date is provided **without a time component**, the instance will default to `00:00:00.000` UTC\n\t * and convert it to the **equivalent local time** using the current environment's UTC offset.*\n\t *\n\t * @param value - A date value as `Chronos` object.\n\t *\n\t * @returns Instance of `Chronos` with all methods and properties.\n\t */\n\tconstructor(value: Chronos);\n\n\t/**\n\t * * Creates a new immutable `Chronos` instance.\n\t *\n\t * **Note**: *If a date is provided **without a time component**, the instance will default to `00:00:00.000` UTC\n\t * and convert it to the **equivalent local time** using the current environment's UTC offset.*\n\t *\n\t * @param year The full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year.\n\t * @param month The month as a number between 1 and 12 (January to December).\n\t * @param date The date as a number between 1 and 31.\n\t * @param hours Must be supplied if minutes is supplied. A number from 0 to 23 (midnight to 11pm) that specifies the hour.\n\t * @param minutes Must be supplied if seconds is supplied. A number from 0 to 59 that specifies the minutes.\n\t * @param seconds Must be supplied if milliseconds is supplied. A number from 0 to 59 that specifies the seconds.\n\t * @param ms A number from 0 to 999 that specifies the milliseconds.\n\t *\n\t * @returns Instance of `Chronos` with all methods and properties.\n\t */\n\tconstructor(\n\t\tyear: number,\n\t\tmonth: number,\n\t\tdate?: number,\n\t\thours?: number,\n\t\tminutes?: number,\n\t\tseconds?: number,\n\t\tms?: number,\n\t);\n\n\t/**\n\t * * Creates a new immutable `Chronos` instance.\n\t *\n\t * **Note**: *If a date is provided **without a time component**, the instance will default to `00:00:00.000` UTC\n\t * and convert it to the **equivalent local time** using the current environment's UTC offset.*\n\t *\n\t * @param value - A date value (`number`, `string`, `Date`, or `Chronos` object).\n\t * - If a string is provided, it should be in a format that can be parsed by the `Date` constructor.\n\t * - If a number is provided, it should be a timestamp (milliseconds since the Unix epoch).\n\t * - If a Date object is provided, it will be used as is.\n\t * - If a Chronos object is provided, it will be used directly.\n\t *\n\t * @returns Instance of `Chronos` with all methods and properties.\n\t */\n\tconstructor(value?: ChronosInput);\n\n\t/**\n\t * * Creates a new immutable `Chronos` instance.\n\t *\n\t * **Note**: *If a date is provided **without a time component**, the instance will default to `00:00:00.000` UTC\n\t * and convert it to the **equivalent local time** using the current environment's UTC offset.*\n\t *\n\t * @param valueOrYear The value in number, string, Date or Chronos format or the full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year.\n\t * @param month The month as a number between 1 and 12 (January to December).\n\t * @param date The date as a number between 1 and 31.\n\t * @param hours Must be supplied if minutes is supplied. A number from 0 to 23 (midnight to 11pm) that specifies the hour.\n\t * @param minutes Must be supplied if seconds is supplied. A number from 0 to 59 that specifies the minutes.\n\t * @param seconds Must be supplied if milliseconds is supplied. A number from 0 to 59 that specifies the seconds.\n\t * @param ms A number from 0 to 999 that specifies the milliseconds.\n\t *\n\t * @returns Instance of `Chronos` with all methods and properties.\n\t */\n\tconstructor(\n\t\tvalueOrYear?: ChronosInput,\n\t\tmonth?: number,\n\t\tdate?: number,\n\t\thours?: number,\n\t\tminutes?: number,\n\t\tseconds?: number,\n\t\tms?: number,\n\t) {\n\t\tif (typeof valueOrYear === 'number' && typeof month === 'number') {\n\t\t\tthis.#date = new Date(\n\t\t\t\tvalueOrYear,\n\t\t\t\tmonth - 1,\n\t\t\t\tdate ?? 1,\n\t\t\t\thours ?? 0,\n\t\t\t\tminutes ?? 0,\n\t\t\t\tseconds ?? 0,\n\t\t\t\tms ?? 0,\n\t\t\t);\n\t\t\tthis.native = this.#date;\n\t\t} else {\n\t\t\tthis.#date = this.#toNewDate(valueOrYear);\n\t\t\tthis.native = this.#date;\n\t\t}\n\n\t\tthis.#ORIGIN = 'root';\n\t\tthis.origin = this.#ORIGIN;\n\t\tthis.#offset = `UTC${this.getUTCOffset()}` as UTCOffSet;\n\t}\n\n\t*[Symbol.iterator](): IterableIterator<[string, number]> {\n\t\tyield ['year', this.year];\n\t\tyield ['month', this.month];\n\t\tyield ['isoMonth', this.month + 1];\n\t\tyield ['date', this.date];\n\t\tyield ['weekDay', this.weekDay];\n\t\tyield ['isoWeekDay', this.weekDay + 1];\n\t\tyield ['hour', this.hour];\n\t\tyield ['minute', this.minute];\n\t\tyield ['second', this.second];\n\t\tyield ['millisecond', this.millisecond];\n\t\tyield ['timestamp', this.timestamp];\n\t\tyield ['unix', this.unix];\n\t}\n\n\t/**\n\t * * Enables primitive coercion like `console.log`, `${chronos}`, etc.\n\t * @param hint - The type hint provided by the JS engine.\n\t * @returns The primitive value based on the hint.\n\t */\n\t[Symbol.toPrimitive](hint: string): string | number {\n\t\tif (hint === 'number') return this.valueOf();\n\t\treturn this.toLocalISOString();\n\t}\n\n\t[Symbol.replace](string: string, replacement: string): string {\n\t\tswitch (this.#ORIGIN) {\n\t\t\tcase 'timeZone':\n\t\t\tcase 'toUTC':\n\t\t\tcase 'utc':\n\t\t\t\treturn string.replace(\n\t\t\t\t\tthis.toISOString().replace(\n\t\t\t\t\t\t/\\.\\d+(Z|[+-]\\d{2}:\\d{2})?$/,\n\t\t\t\t\t\t'',\n\t\t\t\t\t),\n\t\t\t\t\treplacement,\n\t\t\t\t);\n\t\t\tdefault:\n\t\t\t\treturn string.replace(\n\t\t\t\t\tthis.toLocalISOString().replace(\n\t\t\t\t\t\t/\\.\\d+(Z|[+-]\\d{2}:\\d{2})?$/,\n\t\t\t\t\t\t'',\n\t\t\t\t\t),\n\t\t\t\t\treplacement,\n\t\t\t\t);\n\t\t}\n\t}\n\n\t[Symbol.search](string: string): number {\n\t\tswitch (this.#ORIGIN) {\n\t\t\tcase 'timeZone':\n\t\t\tcase 'toUTC':\n\t\t\tcase 'utc':\n\t\t\t\treturn string.indexOf(\n\t\t\t\t\tthis.toISOString().replace(\n\t\t\t\t\t\t/\\.\\d+(Z|[+-]\\d{2}:\\d{2})?$/,\n\t\t\t\t\t\t'',\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\tdefault:\n\t\t\t\treturn string.indexOf(\n\t\t\t\t\tthis.toLocalISOString().replace(\n\t\t\t\t\t\t/\\.\\d+(Z|[+-]\\d{2}:\\d{2})?$/,\n\t\t\t\t\t\t'',\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t}\n\t}\n\n\t[Symbol.split](string: string): string[] {\n\t\tswitch (this.#ORIGIN) {\n\t\t\tcase 'timeZone':\n\t\t\tcase 'toUTC':\n\t\t\tcase 'utc':\n\t\t\t\treturn string.split(\n\t\t\t\t\tthis.toISOString().replace(\n\t\t\t\t\t\t/\\.\\d+(Z|[+-]\\d{2}:\\d{2})?$/,\n\t\t\t\t\t\t'',\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\tdefault:\n\t\t\t\treturn string.split(\n\t\t\t\t\tthis.toLocalISOString().replace(\n\t\t\t\t\t\t/\\.\\d+(Z|[+-]\\d{2}:\\d{2})?$/,\n\t\t\t\t\t\t'',\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t}\n\t}\n\n\tget [Symbol.toStringTag](): string {\n\t\tswitch (this.#ORIGIN) {\n\t\t\tcase 'timeZone':\n\t\t\t\treturn this.toISOString().replace('Z', this.#offset.slice(3));\n\t\t\tcase 'toUTC':\n\t\t\tcase 'utc':\n\t\t\t\treturn this.#toLocalISOString().replace(\n\t\t\t\t\tthis.getUTCOffset(),\n\t\t\t\t\t'Z',\n\t\t\t\t);\n\t\t\tdefault:\n\t\t\t\treturn this.#toLocalISOString();\n\t\t}\n\t}\n\n\t/**\n\t * @private Method to create native `Date` instance from date-like data types.\n\t * @param value The value to convert into `Date`.\n\t * @returns Instance of native Date object.\n\t */\n\t#toNewDate(value?: ChronosInput): Date {\n\t\tconst date =\n\t\t\tvalue instanceof Chronos ?\n\t\t\t\tvalue.toDate()\n\t\t\t:\tnew Date(value ?? Date.now());\n\n\t\t// Check if the date is invalid\n\t\tif (isNaN(date.getTime())) {\n\t\t\tthrow new Error('Provided date is invalid!');\n\t\t}\n\n\t\treturn date;\n\t}\n\n\t/**\n\t * @private Method to tag origin of the `Chronos` instance.\n\t *\n\t * @param origin Origin of the instance, the method name from where it was created.\n\t * @param offset Optional UTC offset in `UTC+12:00` format.\n\t * @returns The `Chronos` instance with the specified origin.\n\t */\n\t#withOrigin(origin: ChronosMethods, offset?: UTCOffSet): Chronos {\n\t\tconst instance = new Chronos(this.#date);\n\t\tinstance.#ORIGIN = origin;\n\t\tinstance.origin = origin;\n\t\tif (offset) instance.#offset = offset;\n\t\treturn instance;\n\t}\n\n\t/**\n\t * @private Formats the current `Chronos` date using the specified template.\n\t *\n\t * @param format - The desired date format.\n\t * @param useUTC - Whether to use UTC or local time.\n\t * @returns Formatted date string.\n\t */\n\t#format(format: string, useUTC = false): string {\n\t\tconst year =\n\t\t\tuseUTC ? this.#date.getUTCFullYear() : this.#date.getFullYear();\n\t\tconst month = useUTC ? this.#date.getUTCMonth() : this.#date.getMonth();\n\t\tconst day = useUTC ? this.#date.getUTCDay() : this.#date.getDay();\n\t\tconst date = useUTC ? this.#date.getUTCDate() : this.#date.getDate();\n\t\tconst hours = useUTC ? this.#date.getUTCHours() : this.#date.getHours();\n\t\tconst minutes =\n\t\t\tuseUTC ? this.#date.getUTCMinutes() : this.#date.getMinutes();\n\t\tconst seconds =\n\t\t\tuseUTC ? this.#date.getUTCSeconds() : this.#date.getSeconds();\n\t\tconst milliseconds =\n\t\t\tuseUTC ?\n\t\t\t\tthis.#date.getUTCMilliseconds()\n\t\t\t:\tthis.#date.getMilliseconds();\n\n\t\tconst dateComponents: Record<ChronosFormat, string> = {\n\t\t\tYYYY: String(year),\n\t\t\tYY: String(year).slice(-2),\n\t\t\tyyyy: String(year),\n\t\t\tyy: String(year).slice(-2),\n\t\t\tM: String(month + 1),\n\t\t\tMM: String(month + 1).padStart(2, '0'),\n\t\t\tmmm: MONTHS[month].slice(0, 3),\n\t\t\tmmmm: MONTHS[month],\n\t\t\td: DAYS[day].slice(0, 2),\n\t\t\tdd: DAYS[day].slice(0, 3),\n\t\t\tddd: DAYS[day],\n\t\t\tD: String(date),\n\t\t\tDD: String(date).padStart(2, '0'),\n\t\t\tDo: getOrdinal(date),\n\t\t\tH: String(hours),\n\t\t\tHH: String(hours).padStart(2, '0'),\n\t\t\th: String(hours % 12 || 12),\n\t\t\thh: String(hours % 12 || 12).padStart(2, '0'),\n\t\t\tm: String(minutes),\n\t\t\tmm: String(minutes).padStart(2, '0'),\n\t\t\ts: String(seconds),\n\t\t\tss: String(seconds).padStart(2, '0'),\n\t\t\tms: String(milliseconds),\n\t\t\tmss: String(milliseconds).padStart(3, '0'),\n\t\t\ta: hours < 12 ? 'am' : 'pm',\n\t\t\tA: hours < 12 ? 'AM' : 'PM',\n\t\t};\n\n\t\tlet result = '';\n\t\tlet i = 0;\n\n\t\twhile (i < format?.length) {\n\t\t\tlet matched = false;\n\n\t\t\tfor (const token of sortedFormats) {\n\t\t\t\tconst ahead = format?.slice(i, i + token?.length);\n\t\t\t\tconst prev = i === 0 ? '' : format[i - 1];\n\t\t\t\tconst next = format[i + token?.length] ?? '';\n\n\t\t\t\t// Check non-alphanumeric boundaries\n\t\t\t\tconst prevOk = i === 0 || /[^a-zA-Z0-9]/.test(prev);\n\t\t\t\tconst nextOk =\n\t\t\t\t\ti + token?.length >= format?.length ||\n\t\t\t\t\t/[^a-zA-Z0-9]/.test(next);\n\n\t\t\t\tif (ahead === token && prevOk && nextOk) {\n\t\t\t\t\tresult += dateComponents[token];\n\t\t\t\t\ti += token?.length;\n\t\t\t\t\tmatched = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!matched) {\n\t\t\t\tresult += format[i];\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/** @private Returns ISO string with local time zone offset */\n\t#toLocalISOString(): string {\n\t\tconst pad = (n: number, p = 2) => String(n).padStart(p, '0');\n\n\t\treturn `${this.year}-${pad(this.month + 1)}-${pad(this.date)}T${pad(this.hour)}:${pad(this.minute)}:${pad(this.second)}.${pad(this.millisecond, 3)}${this.getUTCOffset()}`;\n\t}\n\n\t/**\n\t * @private Normalizes duration values based on sign and `absolute` flag.\n\t * @param result The raw time breakdown to normalize.\n\t * @param absolute If true, ensures all values are positive.\n\t * @param isFuture Whether the duration was forward (true) or backward (false).\n\t * @returns The normalized duration object.\n\t */\n\t#normalizeDuration(\n\t\tresult: TimeDuration,\n\t\tabsolute: boolean,\n\t\tisFuture: boolean,\n\t): TimeDuration {\n\t\tconst entries = Object.entries(result) as [\n\t\t\tkeyof TimeDuration,\n\t\t\tnumber,\n\t\t][];\n\n\t\tif (!absolute && !isFuture) {\n\t\t\tfor (const [key, value] of entries) {\n\t\t\t\tif (value !== 0) {\n\t\t\t\t\tresult[key] = value * -1;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (absolute) {\n\t\t\tfor (const [key, value] of entries) {\n\t\t\t\tresult[key] = Math.abs(value);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/** Gets the full year of the date. */\n\tget year(): number {\n\t\treturn this.#date.getFullYear();\n\t}\n\n\t/** Gets the month (0-11) of the date. */\n\tget month(): number {\n\t\treturn this.#date.getMonth();\n\t}\n\n\t/** Gets the day of the month (1-31). */\n\tget date(): number {\n\t\treturn this.#date.getDate();\n\t}\n\n\t/** Gets the day of the week (0-6, where 0 is Sunday). */\n\tget weekDay(): number {\n\t\treturn this.#date.getDay();\n\t}\n\n\t/** Gets the hour (0-23) of the date. */\n\tget hour(): number {\n\t\treturn this.#date.getHours();\n\t}\n\n\t/** Gets the minute (0-59) of the date. */\n\tget minute(): number {\n\t\treturn this.#date.getMinutes();\n\t}\n\n\t/** Gets the second (0-59) of the date. */\n\tget second(): number {\n\t\treturn this.#date.getSeconds();\n\t}\n\n\t/** Gets the millisecond (0-999) of the date. */\n\tget millisecond(): number {\n\t\treturn this.#date.getMilliseconds();\n\t}\n\n\t/** Gets ISO weekday: 1 = Monday, 7 = Sunday */\n\tget isoWeekday(): number {\n\t\tconst day = this.weekDay;\n\n\t\treturn day === 0 ? 7 : day;\n\t}\n\n\t/** Gets ISO month (1–12 instead of 0–11) */\n\tget isoMonth(): number {\n\t\treturn this.month + 1;\n\t}\n\n\t/** Returns the Unix timestamp (seconds since the Unix epoch: January 1, 1970, UTC). */\n\tget unix(): number {\n\t\treturn Math.floor(this.#date.getTime() / 1000);\n\t}\n\n\t/** Gets the time value in milliseconds since midnight, January 1, 1970 UTC. */\n\tget timestamp(): number {\n\t\treturn this.#date.getTime();\n\t}\n\n\t/** * Gets the last date (number) of the current month `(28, 29, 30 or 31)`. */\n\tget lastDateOfMonth(): 28 | 29 | 30 | 31 {\n\t\treturn this.lastDayOfMonth().#date.getDate() as 28 | 29 | 30 | 31;\n\t}\n\n\t/** @instance Returns a debug-friendly string for `console.log` or `util.inspect`. */\n\tinspect(): string {\n\t\treturn `[Chronos ${this.toLocalISOString()}]`;\n\t}\n\n\t/** @instance Enables JSON.stringify and logging in the console (in Browser environment) to show readable output. */\n\ttoJSON(): string {\n\t\treturn this.toLocalISOString();\n\t}\n\n\t/** @instance Enables arithmetic and comparison operations (e.g., +new Chronos()). */\n\tvalueOf(): number {\n\t\treturn this.getTimeStamp();\n\t}\n\n\t/** @instance Clones and returns a new Chronos instance with the same date. */\n\tclone(): Chronos {\n\t\treturn new Chronos(this.#date).#withOrigin(\n\t\t\tthis.#ORIGIN as ChronosMethods,\n\t\t);\n\t}\n\n\t/** @instance Gets the native `Date` instance (read-only). */\n\ttoDate(): Date {\n\t\tswitch (this.#ORIGIN) {\n\t\t\tcase 'toUTC':\n\t\t\tcase 'utc': {\n\t\t\t\tconst mins = this.getUTCOffsetMinutes();\n\n\t\t\t\tconst date = this.addMinutes(mins);\n\n\t\t\t\treturn date.toDate();\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn new Date(this.#date);\n\t\t}\n\t}\n\n\t/** @instance Returns a string representation of a date. The format of the string depends on the locale. */\n\ttoString(): string {\n\t\tswitch (this.#ORIGIN) {\n\t\t\tcase 'timeZone': {\n\t\t\t\tconst gmt = this.#offset.replace('UTC', 'GMT').replace(':', '');\n\t\t\t\tconst label = TIME_ZONE_LABELS[this.#offset] ?? this.#offset;\n\n\t\t\t\treturn this.#date\n\t\t\t\t\t.toString()\n\t\t\t\t\t.replace(/GMT[+-]\\d{4} \\([^)]+\\)/, `${gmt} (${label})`);\n\t\t\t}\n\t\t\tcase 'toUTC':\n\t\t\tcase 'utc': {\n\t\t\t\tconst mins = this.getUTCOffsetMinutes();\n\n\t\t\t\tconst date = this.addMinutes(mins);\n\n\t\t\t\treturn date.toString();\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn this.#date.toString();\n\t\t}\n\t}\n\n\t/** @instance Returns ISO string with local time zone offset */\n\ttoLocalISOString(): string {\n\t\tswitch (this.#ORIGIN) {\n\t\t\tcase 'timeZone':\n\t\t\tcase 'toUTC':\n\t\t\tcase 'utc': {\n\t\t\t\tconst previousOffset = this.getTimeZoneOffsetMinutes();\n\t\t\t\tconst currentOffset = this.getUTCOffsetMinutes();\n\n\t\t\t\tconst date = this.addMinutes(-previousOffset - currentOffset);\n\n\t\t\t\treturn date.#toLocalISOString();\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn this.#toLocalISOString();\n\t\t}\n\t}\n\n\t/** @instance Returns a date as a string value in ISO format. */\n\ttoISOString(): string {\n\t\tswitch (this.#ORIGIN) {\n\t\t\tcase 'timeZone':\n\t\t\t\treturn this.#toLocalISOString().replace(\n\t\t\t\t\tthis.getUTCOffset(),\n\t\t\t\t\tthis.#offset.slice(3),\n\t\t\t\t);\n\t\t\tcase 'toUTC':\n\t\t\tcase 'utc':\n\t\t\t\treturn this.#toLocalISOString().replace(\n\t\t\t\t\tthis.getUTCOffset(),\n\t\t\t\t\t'Z',\n\t\t\t\t);\n\t\t\tdefault:\n\t\t\t\treturn this.#date.toISOString();\n\t\t}\n\t}\n\n\t/**\n\t * @instance Wrapper over native `toLocaleString`\n\t * @description Converts a date and time to a string by using the current or specified locale.\n\t *\n\t * @param locales A locale string, array of locale strings, Intl.Locale object, or array of Intl.Locale objects that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.\n\t * @param options An object that contains one or more properties that specify comparison options.\n\t */\n\ttoLocaleString(\n\t\tlocale?: LocaleCode | Intl.Locale | (LocaleCode | Intl.Locale)[],\n\t\toptions?: Intl.DateTimeFormatOptions,\n\t): string {\n\t\treturn this.#date.toLocaleString(locale, options);\n\t}\n\n\t/** @instance Returns the time value in milliseconds since midnight, January 1, 1970 UTC. */\n\tgetTimeStamp(): number {\n\t\treturn this.#date.getTime();\n\t}\n\n\t/**\n\t * @instance Formats the date into a custom string format (local time).\n\t *\n\t * @param format - The desired format (Default format is `dd, mmm DD, YYYY HH:mm:ss` = `Sun, Apr 06, 2025 16:11:55`).\n\t * @param useUTC - Optional `useUTC` to get the formatted time using UTC Offset, defaults to `false`. Equivalent to `formatUTC()` method if set to `true`.\n\t * @returns Formatted date string in desired format (in local time unless `useUTC` passed as `true`).\n\t */\n\tformat(format?: string, useUTC = false): string {\n\t\treturn this.#format(format ?? 'dd, mmm DD, YYYY HH:mm:ss', useUTC);\n\t}\n\n\t/**\n\t * @instance Formats the date into a predefined strict string format using local time or UTC.\n\t *\n\t * @remarks Offers over 21,000 predefined formats with full IntelliSense support.\n\t *\n\t * @param format - The desired format string. Defaults to `'dd, mmm DD, YYYY HH:mm:ss'`\n\t * (e.g., `'Sun, Apr 06, 2025 16:11:55'`).\n\t * @param useUTC - If `true`, formats the date in UTC (equivalent to `formatUTC()`);\n\t * defaults to `false` (local time).\n\t * @returns A formatted date string in the specified format\n\t */\n\tformatStrict(format?: StrictFormat, useUTC = false): string {\n\t\treturn this.#format(format ?? 'dd, mmm DD, YYYY HH:mm:ss', useUTC);\n\t}\n\n\t/**\n\t * @instance Formats the date into a custom string format (UTC time).\n\t *\n\t * @param format - The desired format (Default format is `dd, mmm DD, YYYY HH:mm:ss:mss` = `Sun, Apr 06, 2025 16:11:55:379`).\n\t * @returns Formatted date string in desired format (UTC time).\n\t */\n\tformatUTC(format: string = 'dd, mmm DD, YYYY HH:mm:ss:mss'): string {\n\t\tswitch (this.#offset) {\n\t\t\tcase 'UTC+00:00':\n\t\t\t\treturn this.#format(format, false);\n\t\t\tdefault:\n\t\t\t\treturn this.#format(format, true);\n\t\t}\n\t}\n\n\t/**\n\t * @instance Adds seconds and returns a new immutable instance.\n\t * @param seconds - Number of seconds to add.\n\t * @returns A new `Chronos` instance with the updated date.\n\t */\n\taddSeconds(seconds: number): Chronos {\n\t\tconst newDate = new Date(this.#date);\n\t\tnewDate.setSeconds(newDate.getSeconds() + seconds);\n\t\treturn new Chronos(newDate).#withOrigin('addSeconds');\n\t}\n\n\t/**\n\t * @instance Adds minutes and returns a new immutable instance.\n\t * @param minutes - Number of minutes to add.\n\t * @returns A new `Chronos` instance with the updated date.\n\t */\n\taddMinutes(minutes: number): Chronos {\n\t\tconst newDate = new Date(this.#date);\n\t\tnewDate.setMinutes(newDate.getMinutes() + minutes);\n\t\treturn new Chronos(newDate).#withOrigin('addMinutes');\n\t}\n\n\t/**\n\t * @instance Adds hours and returns a new immutable instance.\n\t * @param hours - Number of hours to add.\n\t * @returns A new `Chronos` instance with the updated date.\n\t */\n\taddHours(hours: number): Chronos {\n\t\tconst newDate = new Date(this.#date);\n\t\tnewDate.setHours(newDate.getHours() + hours);\n\t\treturn new Chronos(newDate).#withOrigin('addHours');\n\t}\n\n\t/**\n\t * @instance Adds days and returns a new immutable instance.\n\t * @param days - Number of days to add.\n\t * @returns A new `Chronos` instance with the updated date.\n\t */\n\taddDays(days: number): Chronos {\n\t\tconst newDate = new Date(this.#date);\n\t\tnewDate.setDate(newDate.getDate() + days);\n\t\treturn new Chronos(newDate).#withOrigin('addDays');\n\t}\n\n\t/**\n\t * @instance Adds weeks and returns a new immutable instance.\n\t * @param weeks - Number of weeks to add.\n\t * @returns A new `Chronos` instance with the updated date.\n\t */\n\taddWeeks(weeks: number): Chronos {\n\t\tconst newDate = new Date(this.#date);\n\t\tnewDate.setDate(newDate.getDate() + weeks * 7);\n\t\treturn new Chronos(newDate).#withOrigin('addWeeks');\n\t}\n\n\t/**\n\t * @instance Adds months and returns a new immutable instance.\n\t * @param months - Number of months to add.\n\t * @returns A new `Chronos` instance with the updated date.\n\t */\n\taddMonths(months: number): Chronos {\n\t\tconst newDate = new Date(this.#date);\n\t\tnewDate.setMonth(newDate.getMonth() + months);\n\t\treturn new Chronos(newDate).#withOrigin('addMonths');\n\t}\n\n\t/**\n\t * @instance Adds years and returns a new immutable instance.\n\t * @param years - Number of years to add.\n\t * @returns A new `Chronos` instance with the updated date.\n\t */\n\taddYears(years: number): Chronos {\n\t\tconst newDate = new Date(this.#date);\n\t\tnewDate.setFullYear(newDate.getFullYear() + years);\n\t\treturn new Chronos(newDate).#withOrigin('addYears');\n\t}\n\n\t/**\n\t * @instance Create a new instance of `Chronos` in the specified timezone.\n\t *\n\t * @param zone - Standard timezone abbreviation (e.g., 'IST', 'UTC', 'EST') or UTC Offset in `UTC-01:30` format.\n\t * @returns A new instance of `Chronos` with time in the given timezone. Invalid input sets time-zone to `UTC`.\n\t */\n\ttimeZone(zone: TimeZone | UTCOffSet): Chronos {\n\t\tlet targetOffset: number;\n\t\tlet stringOffset: UTCOffSet;\n\n\t\tif (isValidUTCOffSet(zone)) {\n\t\t\ttargetOffset = extractMinutesFromUTC(zone);\n\t\t\tstringOffset = zone;\n\t\t} else {\n\t\t\ttargetOffset = TIME_ZONES[zone] ?? TIME_ZONES['UTC'];\n\t\t\tstringOffset = formatUTCOffset(targetOffset);\n\t\t}\n\n\t\tconst previousOffset = this.getTimeZoneOffsetMinutes();\n\t\tconst relativeOffset = targetOffset - previousOffset;\n\n\t\tconst adjustedTime = new Date(\n\t\t\tthis.#date.getTime() + relativeOffset * 60 * 1000,\n\t\t);\n\n\t\treturn new Chronos(adjustedTime).#withOrigin('timeZone', stringOffset);\n\t}\n\n\t/**\n\t * @instance Checks if the year is a leap year.\n\t * - A year is a leap year if it is divisible by 4, but not divisible by 100, unless it is also divisible by 400.\n\t * - For example, 2000 and 2400 are leap years, but 1900 and 2100 are not.\n\t * @returns `true` if the year is a leap year, `false` otherwise.\n\t */\n\tisLeapYear(): boolean {\n\t\tconst year = this.#date.getFullYear();\n\n\t\treturn isLeapYear(year);\n\t}\n\n\t/** @instance Checks if the current date is today. */\n\tisToday(): boolean {\n\t\treturn this.getRelativeDay() === 0;\n\t}\n\n\t/** @instance Checks if the current date is tomorrow. */\n\tisTomorrow(): boolean {\n\t\treturn this.getRelativeDay() === 1;\n\t}\n\n\t/** @instance Checks if the current date is yesterday. */\n\tisYesterday(): boolean {\n\t\treturn this.getRelativeDay() === -1;\n\t}\n\n\t/** @instance Checks if another date is exactly equal to this one */\n\tisEqual(other: ChronosInput): boolean {\n\t\tconst time = other instanceof Chronos ? other : new Chronos(other);\n\n\t\treturn this.timestamp === time.timestamp;\n\t}\n\n\t/** @instance Checks if another date is exactly equal to or before this one */\n\tisEqualOrBefore(other: ChronosInput): boolean {\n\t\tconst time = other instanceof Chronos ? other : new Chronos(other);\n\n\t\treturn this.timestamp <= time.timestamp;\n\t}\n\n\t/** @instance Checks if another date is exactly equal to or after this one */\n\tisEqualOrAfter(other: ChronosInput): boolean {\n\t\tconst time = other instanceof Chronos ? other : new Chronos(other);\n\n\t\treturn this.timestamp >= time.timestamp;\n\t}\n\n\t/**\n\t * @instance Checks if another date is the same as this one in a specific unit.\n\t * @param other The other date to compare.\n\t * @param unit The unit to compare.\n\t * @param weekStartsOn Optional: Day the week starts on (0 = Sunday, 1 = Monday). Applicable if week day is required. Default is `0`.\n\t */\n\tisSame(\n\t\tother: ChronosInput,\n\t\tunit: TimeUnit,\n\t\tweekStartsOn: number = 0,\n\t): boolean {\n\t\tconst time = other instanceof Chronos ? other : new Chronos(other);\n\n\t\treturn (\n\t\t\tthis.startOf(unit, weekStartsOn).toDate().getTime() ===\n\t\t\ttime.startOf(unit, weekStartsOn).toDate().getTime()\n\t\t);\n\t}\n\n\t/**\n\t * @instance Checks if this date is before another date in a specific unit.\n\t * @param other The other date to compare.\n\t * @param unit The unit to compare.\n\t * @param weekStartsOn Optional: Day the week starts on (0 = Sunday, 1 = Monday). Applicable if week day is required. Default is `0`.\n\t */\n\tisBefore(\n\t\tother: ChronosInput,\n\t\tunit: TimeUnit,\n\t\tweekStartsOn: number = 0,\n\t): boolean {\n\t\tconst time = other instanceof Chronos ? other : new Chronos(other);\n\n\t\treturn (\n\t\t\tthis.startOf(unit, weekStartsOn).toDate().getTime() <\n\t\t\ttime.startOf(unit, weekStartsOn).toDate().getTime()\n\t\t);\n\t}\n\n\t/**\n\t * @instance Checks if this date is after another date in a specific unit.\n\t * @param other The other date to compare.\n\t * @param unit The unit to compare.\n\t * @param weekStartsOn Optional: Day the week starts on (0 = Sunday, 1 = Monday). Applicable if week day is required. Default is `0`.\n\t */\n\tisAfter(\n\t\tother: ChronosInput,\n\t\tunit: TimeUnit,\n\t\tweekStartsOn: number = 0,\n\t): boolean {\n\t\tconst time = other instanceof Chronos ? other : new Chronos(other);\n\n\t\treturn (\n\t\t\tthis.startOf(unit, weekStartsOn).toDate().getTime() >\n\t\t\ttime.startOf(unit, weekStartsOn).toDate().getTime()\n\t\t);\n\t}\n\n\t/**\n\t * @instance Checks if this date is the same or before another date in a specific unit.\n\t * @param other The other date to compare.\n\t * @param unit The unit to compare.\n\t * @param weekStartsOn Optional: Day the week starts on (0 = Sunday, 1 = Monday). Applicable if week day is required. Default is `0`.\n\t */\n\tisSameOrBefore(\n\t\tother: ChronosInput,\n\t\tunit: TimeUnit,\n\t\tweekStartsOn: number = 0,\n\t): boolean {\n\t\treturn (\n\t\t\tthis.isSame(other, unit, weekStartsOn) ||\n\t\t\tthis.isBefore(other, unit, weekStartsOn)\n\t\t);\n\t}\n\n\t/**\n\t * @instance Checks if this date is the same or after another date in a specific unit.\n\t * @param other The other date to compare.\n\t * @param unit The unit to compare.\n\t * @param weekStartsOn Optional: Day the week starts on (0 = Sunday, 1 = Monday). Applicable if week day is required. Default is `0`.\n\t */\n\tisSameOrAfter(\n\t\tother: ChronosInput,\n\t\tunit: TimeUnit,\n\t\tweekStartsOn: number = 0,\n\t): boolean {\n\t\treturn (\n\t\t\tthis.isSame(other, unit, weekStartsOn) ||\n\t\t\tthis.isAfter(other, unit, weekStartsOn)\n\t\t);\n\t}\n\n\t/**\n\t * @instance Checks if the current date is between the given start and end dates.\n\t *\n\t * @param start - The start of the range.\n\t * @param end - The end of the range.\n\t * @param inclusive - Specifies whether the comparison is inclusive or exclusive:\n\t * - `'[]'`: inclusive of both start and end (≥ start and ≤ end)\n\t * - `'[)'`: inclusive of start, exclusive of end (≥ start and < end)\n\t * - `'(]'`: exclusive of start, inclusive of end (> start and ≤ end)\n\t * - `'()'`: exclusive of both start and end (> start and < end)\n\t *\n\t * @returns `true` if the current date is within the specified range based on the `inclusive` mode.\n\t */\n\tisBetween(\n\t\tstart: ChronosInput,\n\t\tend: ChronosInput,\n\t\tinclusive: '[]' | '[)' | '(]' | '()' = '()',\n\t): boolean {\n\t\tconst s = new Chronos(start).valueOf();\n\t\tconst e = new Chronos(end).valueOf();\n\t\tconst t = this.valueOf();\n\n\t\tswitch (inclusive) {\n\t\t\tcase '[]':\n\t\t\t\treturn t >= s && t <= e;\n\t\t\tcase '[)':\n\t\t\t\treturn t >= s && t < e;\n\t\t\tcase '(]':\n\t\t\t\treturn t > s && t <= e;\n\t\t\tcase '()':\n\t\t\t\treturn t > s && t < e;\n\t\t}\n\t}\n\n\t/**\n\t * @instance Checks if the current date falls on a weekend.\n\t *\n\t * @param weekStartsOn Optional day the week starts on (0–6). Default is `0` (Sunday).\n\t * @param weekendLength Optional length of the weekend (1 or 2). Default is `2`.\n\t * @returns Whether the date is a weekend.\n\t *\n\t * @description\n\t * Weekend is determined based on `weekStartsOn` and `weekendLength`.\n\t *\n\t * - `weekStartsOn` is a 0-based index (0 = Sunday, 1 = Monday, ..., 6 = Saturday).\n\t * - `weekendLength` defines how many days are considered weekend (1 or 2). Default is 2.\n\t * If 1, only the last day of the week is treated as weekend.\n\t * If 2, the last two days are treated as weekend.\n\t */\n\tisWeekend(weekStartsOn: number = 0, weekendLength: 1 | 2 = 2): boolean {\n\t\tconst day = this.#date.getDay();\n\t\tconst lastDayOfWeek = (weekStartsOn + 6) % 7;\n\t\tconst secondLastDay = (weekStartsOn + 5) % 7;\n\n\t\tif (weekendLength === 1) {\n\t\t\treturn day === lastDayOfWeek;\n\t\t}\n\n\t\treturn day === lastDayOfWeek || day === secondLastDay;\n\t}\n\n\t/**\n\t * @instance Checks if the current date is a workday (non-weekend day).\n\t *\n\t * @param weekStartsOn Optional day the week starts on (0–6). Default is `0` (Sunday).\n\t * @param weekendLength Optional length of the weekend (1 or 2). Default is `2`.\n\t * @returns Whether the date is a workday.\n\t *\n\t * @description\n\t * Weekends are determined by `weekStartsOn` and `weekendLength`.\n\t *\n\t * - `weekStartsOn` is a 0-based index (0 = Sunday, 1 = Monday, ..., 6 = Saturday).\n\t * - `weekendLength` defines how many days are considered weekend (1 or 2). Default is 2.\n\t */\n\tisWorkday(weekStartsOn: number = 0, weekendLength: 1 | 2 = 2): boolean {\n\t\treturn !this.isWeekend(weekStartsOn, weekendLength);\n\t}\n\n\t/**\n\t * @instance Checks if the current date and time fall within business hours.\n\t *\n\t * @param businessStartHour Optional starting hour of business time (0–23). Defaults to `9` (9 AM).\n\t * @param businessEndHour Optional ending hour of business time (0–23). Defaults to `17` (5 PM).\n\t * @param weekStartsOn Optional day the week starts on (0–6). Default is `0` (Sunday).\n\t * @param weekendLength Optional weekend length (1 or 2). Default is `2`.\n\t *\n\t * @returns Whether the current time is within business hours.\n\t *\n\t * @remarks\n\t * * Business hours are typically 9 AM to 5 PM on weekdays.\n\t * * Supports standard and overnight business hours. Overnight means `end < start`.\n\t * * Example: `businessStartHour = 22`, `businessEndHour = 6` will cover 10 PM to 6 AM next day.\n\t *\n\t * * *Weekends are determined by `weekStartsOn` and `weekendLength` using the `isWeekend()` method.*\n\t *\n\t * - Business hours are `[businessStartHour, businessEndHour)`.\n\t * - If `weekendLength` is `1`, only the last day of the week is treated as weekend.\n\t * - If `weekendLength` is `2`, the last two days are treated as weekend.\n\t */\n\tisBusinessHour(\n\t\tbusinessStartHour: number = 9,\n\t\tbusinessEndHour: number = 17,\n\t\tweekStartsOn: number = 0,\n\t\tweekendLength: 1 | 2 = 2,\n\t): boolean {\n\t\tif (this.isWeekend(weekStartsOn, weekendLength)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst hour = this.#date.getHours();\n\n\t\tif (businessStartHour === businessEndHour) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (businessStartHour < businessEndHour) {\n\t\t\t// Normal range, e.g. 9 → 17\n\t\t\treturn hour >= businessStartHour && hour < businessEndHour;\n\t\t} else {\n\t\t\t// Overnight shift, e.g. 22 → 6\n\t\t\treturn hour >= businessStartHour || hour < businessEndHour;\n\t\t}\n\t}\n\n\t/**\n\t * @instance Checks if the current date is a palindrome in either padded or non-padded format.\n\t *\n\t * @remarks\n\t * A palindrome date reads the same forward and backward, excluding delimiters.\n\t * This method checks both zero-padded (`MM-DD`) and non-padded (`M-D`) formats for flexibility.\n\t *\n\t * Examples of palindromes:\n\t * - `'2020-02-02'` → `'20200202'` ✅\n\t * - `'2112-11-12'` → `'21121112'` ❌\n\t * - `'2011-01-11'` (from `'YY-M-D'`) → `'11111'` ✅\n\t * - `'2011-01-11'` (from `'YYYY-M-D'`) → `'11111'` ❌\n\t *\n\t * @param shortYear - If `true`, uses `'YY-MM-DD'` and `'YY-M-D'` formats.\n\t * If `false`, uses `'YYYY-MM-DD'` and `'YYYY-M-D'` formats.\n\t * Defaults to `false`.\n\t *\n\t * @returns `true` if either padded or non-padded formatted date is a palindrome, otherwise `false`.\n\t *\n\t * @example\n\t * new Chronos('2020-02-02').isPalindromeDate(); // true\n\t * new Chronos('2112-11-12').isPalindromeDate(); // false\n\t * new Chronos('2011-1-11').isPalindromeDate(); // false (from '2011111')\n\t * new Chronos('2011-1-11').isPalindromeDate(true); // true (from '11111')\n\t * new Chronos('2024-04-11').isPalindromeDate(); // false\n\t */\n\tisPalindromeDate(shortYear = false): boolean {\n\t\tconst padded = this.formatStrict(shortYear ? 'YY-MM-DD' : 'YYYY-MM-DD');\n\t\tconst normal = this.formatStrict(shortYear ? 'YY-M-D' : 'YYYY-M-D');\n\t\treturn isPalindrome(padded) || isPalindrome(normal);\n\t}\n\n\t/**\n\t * @instance Checks if the date is within daylight saving time (DST).\n\t * @returns Whether the date is in DST.\n\t */\n\tisDST(): boolean {\n\t\tconst year = this.#date.getFullYear();\n\n\t\tconst jan = new Date(year, 0, 1).getTimezoneOffset();\n\n\t\tconst jul = new Date(year, 6, 1).getTimezoneOffset();\n\n\t\treturn this.#date.getTimezoneOffset() < Math.max(jan, jul);\n\t}\n\n\t/** @instance Checks if current day is the first day of the current month. */\n\tisFirstDayOfMonth(): boolean {\n\t\treturn this.isSame(this.firstDayOfMonth(), 'day');\n\t}\n\n\t/** @instance Checks if current day is the last day of the current month. */\n\tisLastDayOfMonth(): boolean {\n\t\treturn this.isSame(this.lastDayOfMonth(), 'day');\n\t}\n\n\t/**\n\t * @instance Returns full time difference from now (or a specified time) down to a given level.\n\t *\n\t * @param level Determines the smallest unit to include in the output (e.g., 'minute' will show up to minutes, ignoring seconds). Defaults to `minute`.\n\t * @param withSuffixPrefix If `true`, adds `\"in\"` or `\"ago\"` depending on whether the time is in the future or past. Defaults to `true`.\n\t * @param time An optional time value to compare with (`string`, `number`, `Date`, or `Chronos` instance). Defaults to `now`.\n\t * @returns The difference as a human-readable string, e.g., `2 years 1 month 9 days 18 hours 56 minutes ago`.\n\t */\n\tfromNow(\n\t\tlevel: Exclude<TimeUnit, 'millisecond'> = 'minute',\n\t\twithSuffixPrefix: boolean = true,\n\t\ttime?: ChronosInput,\n\t): string {\n\t\tconst now = this.#toNewDate(time);\n\n\t\tconst target = this.#date;\n\n\t\tconst isFuture = target > now;\n\n\t\tconst from = isFuture ? now : target;\n\t\tconst to = isFuture ? target : now;\n\n\t\tlet years = to.getFullYear() - from.getFullYear();\n\t\tlet months = to.getMonth() - from.getMonth();\n\t\tlet days = to.getDate() - from.getDate();\n\t\tlet weeks = 0;\n\t\tlet hours = to.getHours() - from.getHours();\n\t\tlet minutes = to.getMinutes() - from.getMinutes();\n\t\tlet seconds = to.getSeconds() - from.getSeconds();\n\n\t\t// Adjust negative values\n\t\tif (seconds < 0) {\n\t\t\tseconds += 60;\n\t\t\tminutes--;\n\t\t}\n\n\t\tif (minutes < 0) {\n\t\t\tminutes += 60;\n\t\t\thours--;\n\t\t}\n\n\t\tif (hours < 0) {\n\t\t\thours += 24;\n\t\t\tdays--;\n\t\t}\n\n\t\tif (level === 'week' || level === 'day') {\n\t\t\tweeks = Math.floor(days / 7);\n\t\t\tdays = days % 7;\n\t\t}\n\n\t\tif (days < 0) {\n\t\t\tconst prevMonth = new Date(to.getFullYear(), to.getMonth(), 0);\n\n\t\t\tdays += prevMonth.getDate();\n\t\t\tmonths--;\n\t\t}\n\n\t\tif (months < 0) {\n\t\t\tmonths += 12;\n\t\t\tyears--;\n\t\t}\n\n\t\tconst unitOrder = [\n\t\t\t'year',\n\t\t\t'month',\n\t\t\t'week',\n\t\t\t'day',\n\t\t\t'hour',\n\t\t\t'minute',\n\t\t\t'second',\n\t\t] as const;\n\n\t\tconst lvlIdx = unitOrder.indexOf(level);\n\n\t\tconst parts: string[] = [];\n\n\t\tif (lvlIdx >= 0 && years > 0 && lvlIdx >= unitOrder.indexOf('year')) {\n\t\t\tparts?.push(formatUnitWithPlural(years, 'year'));\n\t\t}\n\t\tif (lvlIdx >= unitOrder.indexOf('month') && months > 0) {\n\t\t\tparts?.push(formatUnitWithPlural(months, 'month'));\n\t\t}\n\t\tif (lvlIdx >= unitOrder.indexOf('week') && weeks > 0) {\n\t\t\tparts?.push(formatUnitWithPlural(weeks, 'week'));\n\t\t}\n\t\tif (lvlIdx >= unitOrder.indexOf('day') && days > 0) {\n\t\t\tparts?.push(formatUnitWithPlural(days, 'day'));\n\t\t}\n\t\tif (lvlIdx >= unitOrder.indexOf('hour') && hours > 0) {\n\t\t\tparts?.push(formatUnitWithPlural(hours, 'hour'));\n\t\t}\n\t\tif (lvlIdx >= unitOrder.indexOf('minute') && minutes > 0) {\n\t\t\tparts?.push(formatUnitWithPlural(minutes, 'minute'));\n\t\t}\n\t\tif (\n\t\t\tlvlIdx >= unitOrder.indexOf('second') &&\n\t\t\t(seconds > 0 || parts?.length === 0)\n\t\t) {\n\t\t\tparts?.push(formatUnitWithPlural(seconds, 'second'));\n\t\t}\n\n\t\tlet prefix = '';\n\t\tlet suffix = '';\n\n\t\tif (withSuffixPrefix) {\n\t\t\tif (isFuture) {\n\t\t\t\tprefix = 'in ';\n\t\t\t} else {\n\t\t\t\tsuffix = ' ago';\n\t\t\t}\n\t\t}\n\n\t\treturn `${prefix}${parts?.join(' ')}${suffix}`;\n\t}\n\n\t/**\n\t * * Returns the part of day (`'midnight', 'lateNight', 'night', 'morning', 'afternoon', 'evening'`) based on the current hour.\n\t *\n\t * *Supports both normal and wraparound (overnight) ranges.*\n\t *\n\t * @param config - Optional custom hour ranges for each part of day.\n\t * Each range must be a tuple of strings as `[startHour, endHour]` in 24-hour format (e.g., `['06', '11']`).\n\t * Supports wraparound ranges like `['22', '04']` that cross midnight.\n\t *\n\t * **Default Ranges:**\n\t * - night: ['21', '23']\n\t * - midnight: ['00', '01']\n\t * - lateNight: ['02', '04']\n\t * - morning: ['05', '11']\n\t * - afternoon: ['12', '16']\n\t * - evening: ['17', '20']\n\t *\n\t * @returns The current part of the day as a string.\n\t *\n\t * @example\n\t * chronosInstance.getPartOfDay(); // e.g., 'morning'\n\t *\n\t * @example\n\t * // Example with custom ranges\n\t * chronosInstance.getPartOfDay({\n\t * night: ['22', '04'],\n\t * morning: ['05', '11'],\n\t * afternoon: ['12', '16'],\n\t * evening: ['17', '21'],\n\t * lateNight: ['01', '03'],\n\t * midnight: ['00', '00'],\n\t * });\n\t */\n\tgetPartOfDay(config?: Partial<DayPartConfig>): DayPart {\n\t\tconst hour = this.#date.getHours();\n\n\t\tconst ranges: DayPartConfig = {\n\t\t\t...DEFAULT_RANGES,\n\t\t\t...config,\n\t\t};\n\n\t\tfor (const [part, [start, end]] of Object.entries(ranges)) {\n\t\t\tconst from = Number(start);\n\t\t\tconst to = Number(end);\n\n\t\t\tif (from <= to) {\n\t\t\t\tif (hour >= from && hour <= to) {\n\t\t\t\t\treturn part as DayPart;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Wraparound logic (e.g., 20 to 04 means 20–23 OR 00–04)\n\t\t\t\tif (hour >= from || hour <= to) {\n\t\t\t\t\treturn part as DayPart;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn 'night';\n\t}\n\n\t/**\n\t * @instance Returns the number of full years between the input date and now.\n\t * @param time Optional time to compare with the `Chronos` date/time.\n\t * @returns The difference in number, negative is `Chronos` time is a past time else positive.\n\t */\n\tgetRelativeYear(time?: ChronosInput): number {\n\t\tconst now = this.#toNewDate(time);\n\n\t\tlet years = this.#date.getFullYear() - now.getFullYear();\n\n\t\tconst noYearMonthDay =\n\t\t\tnow.getMonth() < this.#date.getMonth() ||\n\t\t\t(now.getMonth() === this.#date.getMonth() &&\n\t\t\t\tnow.getDate() < this.#date.getDate());\n\n\t\tif (noYearMonthDay) {\n\t\t\tyears--;\n\t\t}\n\n\t\treturn years;\n\t}\n\n\t/**\n\t * @instance Returns the number of full months between the input date and now.\n\t * @param time Optional time to compare with the `Chronos` date/time.\n\t * @returns The difference in number, negative is `Chronos` time is a past time else positive.\n\t */\n\tgetRelativeMonth(time?: ChronosInput): number {\n\t\tconst now = this.#toNewDate(time);\n\n\t\tlet months =\n\t\t\t(this.#date.getFullYear() - now.getFullYear()) * 12 +\n\t\t\t(this.#date.getMonth() - now.getMonth());\n\n\t\tconst hasNotHadMonthDay = now.getDate() < this.#date.getDate();\n\n\t\tif (hasNotHadMonthDay) {\n\t\t\tmonths--;\n\t\t}\n\n\t\treturn months;\n\t}\n\n\t/**\n\t * @instance Determines if the given date is today, tomorrow, yesterday or any relative day.\n\t * @param date - The date to compare (Date object).\n\t * @param time Optional time to compare with the `Chronos` date/time.\n\t * @returns\n\t * - `-1` if the date is yesterday.\n\t * - `0` if the date is today.\n\t * - `1` if the date is tomorrow.\n\t * - Other positive or negative numbers for other relative days (e.g., `-2` for two days ago, `2` for two days ahead).\n\t */\n\tgetRelativeDay(time?: ChronosInput): number {\n\t\tconst today = this.#toNewDate(time);\n\t\t// Set the time of today to 00:00:00 for comparison purposes\n\t\ttoday.setHours(0, 0, 0, 0);\n\n\t\t// Normalize the input date to 00:00:00\n\t\tconst inputDate = this.#date;\n\t\tinputDate.setHours(0, 0, 0, 0);\n\n\t\tconst diffTime = inputDate.getTime() - today.getTime();\n\t\tconst diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24));\n\n\t\treturn diffDays;\n\t}\n\n\t/**\n\t * @instance Determines how many full weeks apart the input date is from the `Chronos` instance.\n\t * @param time Optional time to compare with the `Chronos` date/time.\n\t * @returns Difference in weeks; negative if past, positive if future.\n\t */\n\tgetRelativeWeek(time?: ChronosInput): number {\n\t\tconst relativeDays = this.getRelativeDay(time);\n\t\treturn Math.floor(relativeDays / 7);\n\t}\n\n\t/**\n\t * @instance Returns the number of full hours between the input date and now.\n\t * @param time Optional time to compare with the `Chronos` date/time.\n\t * @returns The difference in number, negative is `Chronos` time is a past time else positive.\n\t */\n\tgetRelativeHour(time?: ChronosInput): number {\n\t\tconst diff = this.#date.getTime() - this.#toNewDate(time).getTime();\n\t\treturn Math.floor(diff / (1000 * 60 * 60));\n\t}\n\n\t/**\n\t * @instance Returns the number of full minutes between the input date and now.\n\t * @param time Optional time to compare with the `Chronos` date/time.\n\t * @returns The difference in number, negative is `Chronos` time is a past time else positive.\n\t */\n\tgetRelativeMinute(time?: ChronosInput): number {\n\t\tconst diff = this.#date.getTime() - this.#toNewDate(time).getTime();\n\t\treturn Math.floor(diff / (1000 * 60));\n\t}\n\n\t/**\n\t * @instance Returns the number of full seconds between the input date and now.\n\t * @param time Optional time to compare with the `Chronos` date/time.\n\t * @returns The difference in number, negative is `Chronos` time is a past time else positive.\n\t */\n\tgetRelativeSecond(time?: ChronosInput): number {\n\t\tconst diff = this.#date.getTime() - this.#toNewDate(time).getTime();\n\t\treturn Math.floor(diff / 1000);\n\t}\n\n\t/**\n\t * @instance Returns the number of milliseconds between the input date and now.\n\t * @param time Optional time to compare with the `Chronos` date/time.\n\t * @returns The difference in number, negative is `Chronos` time is a past time else positive.\n\t */\n\tgetRelativeMilliSecond(time?: ChronosInput): number {\n\t\treturn this.#date.getTime() - this.#toNewDate(time).getTime();\n\t}\n\n\t/** @instance Returns a new Chronos instance set to the first day of the current month. */\n\tfirstDayOfMonth(): Chronos {\n\t\tconst year = this.#date.getFullYear();\n\t\tconst month = this.#date.getMonth();\n\t\tconst lastDate = new Date(year, month, 1);\n\t\treturn new Chronos(lastDate).#withOrigin('firstDayOfMonth');\n\t}\n\n\t/** @instance Returns a new Chronos instance set to the last day of the current month. */\n\tlastDayOfMonth(): Chronos {\n\t\tconst year = this.#date.getFullYear();\n\t\tconst month = this.#date.getMonth() + 1;\n\t\tconst lastDate = new Date(year, month, 0);\n\t\treturn new Chronos(lastDate).#withOrigin('lastDayOfMonth');\n\t}\n\n\t/**\n\t * @instance Compares the stored date with now, returning the difference in the specified unit.\n\t *\n\t * @param unit The time unit to compare by. Defaults to 'minute'.\n\t * @param time Optional time to compare with the `Chronos` date/time.\n\t * @returns The difference in number, negative is `Chronos` time is a past time else positive.\n\t */\n\tcompare(unit: TimeUnit = 'minute', time?: ChronosInput): number {\n\t\tswitch (unit) {\n\t\t\tcase 'year':\n\t\t\t\treturn this.getRelativeYear(time);\n\t\t\tcase 'month':\n\t\t\t\treturn this.getRelativeMonth(time);\n\t\t\tcase 'day':\n\t\t\t\treturn this.getRelativeDay(time);\n\t\t\tcase 'week':\n\t\t\t\treturn this.getRelativeWeek(time);\n\t\t\tcase 'hour':\n\t\t\t\treturn this.getRelativeHour(time);\n\t\t\tcase 'minute':\n\t\t\t\treturn this.getRelativeMinute(time);\n\t\t\tcase 'second':\n\t\t\t\treturn this.getRelativeSecond(time);\n\t\t\tcase 'millisecond':\n\t\t\t\treturn this.getRelativeMilliSecond(time);\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported time unit: ${unit}`);\n\t\t}\n\t}\n\n\t/**\n\t * @instance Returns a new Chronos instance at the start of a given unit.\n\t * @param unit The unit to reset (e.g., year, month, day).\n\t * @param weekStartsOn Optional: Day the week starts on (0 = Sunday, 1 = Monday). Applicable if week day is required. Default is `0`.\n\t */\n\tstartOf(unit: TimeUnit, weekStartsOn: number = 0): Chronos {\n\t\tconst d = new Date(this.#date);\n\n\t\tswitch (unit) {\n\t\t\tcase 'year':\n\t\t\t\td.setMonth(0, 1);\n\t\t\t\td.setHours(0, 0, 0, 0);\n\t\t\t\tbreak;\n\t\t\tcase 'month':\n\t\t\t\td.setDate(1);\n\t\t\t\td.setHours(0, 0, 0, 0);\n\t\t\t\tbreak;\n\t\t\tcase 'week': {\n\t\t\t\tconst day = d.getDay();\n\t\t\t\tconst diff = (day - weekStartsOn + 7) % 7;\n\t\t\t\td.setDate(d.getDate() - diff);\n\t\t\t\td.setHours(0, 0, 0, 0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'day':\n\t\t\t\td.setHours(0, 0, 0, 0);\n\t\t\t\tbreak;\n\t\t\tcase 'hour':\n\t\t\t\td.setMinutes(0, 0, 0);\n\t\t\t\tbreak;\n\t\t\tcase 'minute':\n\t\t\t\td.setSeconds(0, 0);\n\t\t\t\tbreak;\n\t\t\tcase 'second':\n\t\t\t\td.setMilliseconds(0);\n\t\t\t\tbreak;\n\t\t\tcase 'millisecond':\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn new Chronos(d).#withOrigin('startOf');\n\t}\n\n\t/**\n\t * @instance Returns a new Chronos instance at the end of a given unit.\n\t * @param unit The unit to adjust (e.g., year, month, day).\n\t * @param weekStartsOn Optional: Day the week starts on (0 = Sunday, 1 = Monday). Applicable if week day is required. Default is `0`.\n\t */\n\tendOf(unit: TimeUnit, weekStartsOn: number = 0): Chronos {\n\t\treturn this.startOf(unit, weekStartsOn)\n\t\t\t.add(1, unit)\n\t\t\t.add(-1, 'millisecond')\n\t\t\t.#withOrigin('endOf');\n\t}\n\n\t/**\n\t * @instance Returns a new Chronos instance with the specified unit added.\n\t * @param amount The amount to add (can be negative).\n\t * @param unit The time unit to add.\n\t */\n\tadd(amount: number, unit: TimeUnit): Chronos {\n\t\tconst d = new Date(this.#date);\n\n\t\tswitch (unit) {\n\t\t\tcase 'millisecond':\n\t\t\t\td.setMilliseconds(d.getMilliseconds() + amount);\n\t\t\t\tbreak;\n\t\t\tcase 'second':\n\t\t\t\td.setSeconds(d.getSeconds() + amount);\n\t\t\t\tbreak;\n\t\t\tcase 'minute':\n\t\t\t\td.setMinutes(d.getMinutes() + amount);\n\t\t\t\tbreak;\n\t\t\tcase 'hour':\n\t\t\t\td.setHours(d.getHours() + amount);\n\t\t\t\tbreak;\n\t\t\tcase 'day':\n\t\t\t\td.setDate(d.getDate() + amount);\n\t\t\t\tbreak;\n\t\t\tcase 'week':\n\t\t\t\td.setDate(d.getDate() + amount * 7);\n\t\t\t\tbreak;\n\t\t\tcase 'month':\n\t\t\t\td.setMonth(d.getMonth() + amount);\n\t\t\t\tbreak;\n\t\t\tcase 'year':\n\t\t\t\td.setFullYear(d.getFullYear() + amount);\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn new Chronos(d).#withOrigin('add');\n\t}\n\n\t/**\n\t * @instance Returns a new Chronos instance with the specified unit subtracted.\n\t * @param amount The amount to subtract (can be negative).\n\t * @param unit The time unit to add.\n\t */\n\tsubtract(amount: number, unit: TimeUnit): Chronos {\n\t\treturn this.add(-amount, unit).#withOrigin('subtract');\n\t}\n\n\t/**\n\t * @instance Gets the value of a specific time unit from the date.\n\t * @param unit The unit to retrieve.\n\t */\n\tget(unit: TimeUnit): number {\n\t\tswitch (unit) {\n\t\t\tcase 'year':\n\t\t\t\treturn this.#date.getFullYear();\n\t\t\tcase 'month':\n\t\t\t\treturn this.#date.getMonth();\n\t\t\tcase 'day':\n\t\t\t\treturn this.#date.getDate();\n\t\t\tcase 'week':\n\t\t\t\treturn this.getWeek();\n\t\t\tcase 'hour':\n\t\t\t\treturn this.#date.getHours();\n\t\t\tcase 'minute':\n\t\t\t\treturn this.#date.getMinutes();\n\t\t\tcase 'second':\n\t\t\t\treturn this.#date.getSeconds();\n\t\t\tcase 'millisecond':\n\t\t\t\treturn this.#date.getMilliseconds();\n\t\t}\n\t}\n\n\t/**\n\t * @instance Returns a new Chronos instance with the specified unit set to the given value.\n\t * @param unit The unit to modify.\n\t * @param value The value to set for the unit.\n\t */\n\tset(unit: TimeUnit, value: number): Chronos {\n\t\tconst d = new Date(this.#date);\n\n\t\tswitch (unit) {\n\t\t\tcase 'year':\n\t\t\t\td.setFullYear(value);\n\t\t\t\tbreak;\n\t\t\tcase 'month':\n\t\t\t\td.setMonth(value);\n\t\t\t\tbreak;\n\t\t\tcase 'day':\n\t\t\t\td.setDate(value);\n\t\t\t\tbreak;\n\t\t\tcase 'week':\n\t\t\t\treturn this.setWeek(value);\n\t\t\tcase 'hour':\n\t\t\t\td.setHours(value);\n\t\t\t\tbreak;\n\t\t\tcase 'minute':\n\t\t\t\td.setMinutes(value);\n\t\t\t\tbreak;\n\t\t\tcase 'second':\n\t\t\t\td.setSeconds(value);\n\t\t\t\tbreak;\n\t\t\tcase 'millisecond':\n\t\t\t\td.setMilliseconds(value);\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn new Chronos(d).#withOrigin('set');\n\t}\n\n\t/**\n\t * @instance Returns the difference between this and another date in the given unit.\n\t * @param other The other date to compare.\n\t * @param unit The unit in which to return the difference.\n\t */\n\tdiff(other: ChronosInput, unit: TimeUnit): number {\n\t\tconst time = other instanceof Chronos ? other : new Chronos(other);\n\n\t\tconst msDiff = this.#date.getTime() - time.toDate().getTime();\n\n\t\tswitch (unit) {\n\t\t\tcase 'millisecond':\n\t\t\t\treturn msDiff;\n\t\t\tcase 'second':\n\t\t\t\treturn msDiff / 1e3;\n\t\t\tcase 'minute':\n\t\t\t\treturn msDiff / 6e4;\n\t\t\tcase 'hour':\n\t\t\t\treturn msDiff / 3.6e6;\n\t\t\tcase 'day':\n\t\t\t\treturn msDiff / 8.64e7;\n\t\t\tcase 'week':\n\t\t\t\treturn msDiff / 6.048e8;\n\t\t\tcase 'month':\n\t\t\t\treturn (\n\t\t\t\t\t(this.get('year') - time.get('year')) * 12 +\n\t\t\t\t\t(this.get('month') - time.get('month'))\n\t\t\t\t);\n\t\t\tcase 'year':\n\t\t\t\treturn this.get('year') - time.get('year');\n\t\t}\n\t}\n\n\t/**\n\t * @instance Returns a human-readable relative calendar time like \"Today at 3:00 PM\"\n\t * @param baseDate Optional base date to compare with.\n\t */\n\tcalendar(baseDate?: ChronosInput): string {\n\t\tconst base = baseDate ? new Chronos(baseDate) : new Chronos();\n\t\tconst input = this.startOf('day');\n\n\t\tconst comparison = base.startOf('day');\n\t\tconst diff = input.diff(comparison, 'day');\n\n\t\tconst timeStr = this.toDate().toLocaleString(undefined, {\n\t\t\thour: 'numeric',\n\t\t\tminute: '2-digit',\n\t\t});\n\n\t\tif (diff === 0) return `Today at ${timeStr}`;\n\t\tif (diff === 1) return `Tomorrow at ${timeStr}`;\n\t\tif (diff === -1) return `Yesterday at ${timeStr}`;\n\n\t\treturn this.toDate().toLocaleString(undefined, {\n\t\t\tmonth: 'long',\n\t\t\tday: '2-digit',\n\t\t\tyear: 'numeric',\n\t\t\tweekday: 'long',\n\t\t\thour: 'numeric',\n\t\t\tminute: '2-digit',\n\t\t});\n\t}\n\n\t/** @instance Returns a short human-readable string like \"2h ago\", \"in 5m\" */\n\tfromNowShort(): string {\n\t\tconst now = new Chronos();\n\t\tconst diffInSeconds = this.diff(now, 'second');\n\n\t\tconst abs = Math.abs(diffInSeconds);\n\n\t\tconst suffix = diffInSeconds >= 0 ? 'in ' : '';\n\t\tconst postfix = diffInSeconds < 0 ? ' ago' : '';\n\n\t\tif (abs < 60) {\n\t\t\treturn `${suffix}${Math.floor(abs)}s${postfix}`;\n\t\t} else if (abs < 3600) {\n\t\t\treturn `${suffix}${Math.floor(abs / 60)}m${postfix}`;\n\t\t} else if (abs < 86400) {\n\t\t\treturn `${suffix}${Math.floor(abs / 3600)}h${postfix}`;\n\t\t} else if (abs < 2592000) {\n\t\t\treturn `${suffix}${Math.floor(abs / 86400)}d${postfix}`;\n\t\t} else if (abs < 31536000) {\n\t\t\treturn `${suffix}${Math.floor(abs / 2592000)}mo${postfix}`;\n\t\t} else {\n\t\t\treturn `${suffix}${Math.floor(abs / 31536000)}y${postfix}`;\n\t\t}\n\t}\n\n\t/**\n\t * @instance Sets the date to the Monday of the specified ISO week number within the current year.\n\t * This method assumes ISO week logic, where week 1 is the week containing January 4th.\n\t *\n\t * @param week The ISO week number (1–53) to set the date to.\n\t * @returns A new Chronos instance set to the start (Monday) of the specified week.\n\t */\n\tsetWeek(week: number): Chronos {\n\t\tconst d = new Date(this.#date);\n\n\t\tconst year = d.getFullYear();\n\t\tconst jan4 = new Date(year, 0, 4);\n\t\tconst dayOfWeek = jan4.getDay() || 7; // Make Sunday (0) into 7\n\t\tconst weekStart = new Date(jan4);\n\t\tweekStart.setDate(jan4.getDate() - (dayOfWeek - 1)); // Move to Monday\n\n\t\tweekStart.setDate(weekStart.getDate() + (week - 1) * 7); // Move to target week\n\t\td.setFullYear(weekStart.getFullYear());\n\t\td.setMonth(weekStart.getMonth());\n\t\td.setDate(weekStart.getDate());\n\n\t\treturn new Chronos(d).#withOrigin('setWeek');\n\t}\n\n\t/**\n\t * @instance Calculates the ISO 8601 week number of the year.\n\t *\n\t * ISO weeks start on Monday, and the first week of the year is the one containing January 4th.\n\t *\n\t * @returns Week number (1–53).\n\t */\n\tgetWeek(): number {\n\t\tconst target = this.startOf('week', 1).add(3, 'day'); // Thursday of current ISO week\n\n\t\tconst firstThursday = new Chronos(target.year, 1, 4) // January 4\n\t\t\t.startOf('week', 1)\n\t\t\t.add(3, 'day'); // Thursday of first ISO week\n\n\t\treturn target.diff(firstThursday, 'week') + 1;\n\t}\n\n\t/**\n\t * @instance Calculates the week number of the year based on custom week start.\n\t * @param weekStartsOn Optional: Day the week starts on (0 = Sunday, 1 = Monday). Applicable if week day is required. Default is `0`.\n\t * @returns Week number (1-53).\n\t */\n\tgetWeekOfYear(weekStartsOn: number = 0): number {\n\t\tconst startOfYear = new Chronos(this.year, 1, 1);\n\t\tconst startOfFirstWeek = startOfYear.startOf('week', weekStartsOn);\n\n\t\tconst week = this.startOf('week', weekStartsOn).diff(\n\t\t\tstartOfFirstWeek,\n\t\t\t'week',\n\t\t);\n\n\t\treturn week + 1;\n\t}\n\n\t/**\n\t * @instance Returns the ISO week-numbering year for the current date.\n\t *\n\t * The ISO week-numbering year may differ from the calendar year.\n\t * For example, January 1st may fall in the last ISO week of the previous year.\n\t *\n\t * @param weekStartsOn Optional: Defines the start day of the week (0 = Sunday, 1 = Monday).\n\t * Defaults to 0 (Sunday). Use 1 for strict ISO 8601.\n\t * @returns The ISO week-numbering year.\n\t */\n\tgetWeekYear(weekStartsOn: number = 0): number {\n\t\tconst d = this.startOf('week', weekStartsOn).add(3, 'day'); // Thursday of current ISO week\n\t\treturn d.year;\n\t}\n\n\t/** @instance Returns day of year (1 - 366) */\n\tgetDayOfYear(): number {\n\t\tconst start = new Date(this.year, 0, 1);\n\t\tconst diff = this.#date.getTime() - start.getTime();\n\t\treturn Math.floor(diff / 86400000) + 1;\n\t}\n\n\t/**\n\t * @instance Returns the zodiac sign for the current date.\n\t * @returns The Western zodiac sign.\n\t */\n\tgetZodiacSign(): ZodiacSign {\n\t\tconst day = this.#date.getDate();\n\t\tconst month = this.#date.getMonth() + 1;\n\n\t\tfor (const [sign, [m, d]] of ZODIAC_SIGNS) {\n\t\t\tif (month === m && day <= d) {\n\t\t\t\treturn sign;\n\t\t\t}\n\t\t}\n\n\t\treturn 'Capricorn';\n\t}\n\n\t/** @instance Returns number of days in current month */\n\tdaysInMonth(): number {\n\t\treturn new Date(this.year, this.month + 1, 0).getDate();\n\t}\n\n\t/** @instance Converts to object with all date unit parts */\n\ttoObject(): ChronosObject {\n\t\treturn Object.fromEntries([...this]) as unknown as ChronosObject;\n\t}\n\n\t/** @instance Converts to array with all date unit parts */\n\ttoArray() {\n\t\treturn Object.values(this.toObject());\n\t}\n\n\t/**\n\t * @instance Returns the academic year based on a typical start in July and end in June.\n\t * @returns The academic year in format `YYYY-YYYY`.\n\t */\n\ttoAcademicYear(): `${number}-${number}` {\n\t\tconst year = this.#date.getFullYear();\n\t\tconst month = this.#date.getMonth();\n\t\tif (month >= 6) {\n\t\t\treturn `${year}-${year + 1}`;\n\t\t}\n\t\treturn `${year - 1}-${year}`;\n\t}\n\n\t/**\n\t * @instance Returns the **calendar quarter** (1 to 4) of the current date.\n\t *\n\t * @remarks\n\t * A calendar year is divided into four quarters:\n\t *\n\t * - `Q1`: January to March\n\t * - `Q2`: April to June\n\t * - `Q3`: July to September\n\t * - `Q4`: October to December\n\t *\n\t * This method strictly uses the **calendar year**. For fiscal quarters, use `toFiscalQuarter()` instead.\n\t *\n\t * @example\n\t * new Chronos('2025-02-14').toQuarter(); // 1\n\t * new Chronos('2025-08-09').toQuarter(); // 3\n\t *\n\t * @returns The calendar quarter number (1–4).\n\t */\n\ttoQuarter(): Quarter {\n\t\tconst month = this.#date.getMonth();\n\t\treturn (Math.floor(month / 3) + 1) as Quarter;\n\t}\n\n\t/**\n\t * @instance Returns the fiscal quarter based on custom fiscal year start (defaults to July).\n\t * @param startMonth - The fiscal year start month (1-12), default is July (7).\n\t * @returns The fiscal quarter (1-4).\n\t */\n\ttoFiscalQuarter(startMonth: number = 7): Quarter {\n\t\tconst month = this.#date.getMonth() + 1;\n\t\tconst adjusted = (month - startMonth + 12) % 12;\n\t\treturn (Math.floor(adjusted / 3) + 1) as Quarter;\n\t}\n\n\t/**\n\t * @instance Returns the system's current UTC offset formatted as `+06:00` or `-07:00`.\n\t *\n\t * - *Unlike `Date.prototype.getTimezoneOffset()`, which returns the offset in minutes **behind** UTC (positive for locations west of UTC and negative for east), this method returns the more intuitive sign format used in time zone representations (e.g., `UTC+06:00` means 6 hours **ahead** of UTC).*\n\t *\n\t * @returns The (local) system's UTC offset in `±HH:mm` format.\n\t */\n\tgetUTCOffset(): string {\n\t\tconst offset = -this.#date.getTimezoneOffset();\n\t\tconst sign = offset >= 0 ? '+' : '-';\n\n\t\tconst pad = (n: number) =>\n\t\t\tString(Math.floor(Math.abs(n))).padStart(2, '0');\n\n\t\treturn `${sign}${pad(offset / 60)}:${pad(offset % 60)}`;\n\t}\n\n\t/**\n\t * @instance Returns the timezone offset of this `Chronos` instance in `+06:00` or `-07:00` format maintaining current timezone.\n\t *\n\t * - *Unlike `Date.prototype.getTimezoneOffset()`, which returns the offset in minutes **behind** UTC (positive for locations west of UTC and negative for east), this method returns the more intuitive sign format used in time zone representations (e.g., `UTC+06:00` means 6 hours **ahead** of UTC).*\n\t *\n\t * @returns The timezone offset string in `±HH:mm` format maintaining the current timezone regardless of system having different one.\n\t */\n\tgetTimeZoneOffset(): string {\n\t\treturn this.#offset.replace('UTC', '');\n\t}\n\n\t/**\n\t * @instance Returns the system's UTC offset in minutes.\n\t *\n\t * - *Unlike JavaScript's `Date.prototype.getTimezoneOffset()`, this method returns a positive value if the local time is ahead of UTC, and negative if behind UTC.*\n\t *\n\t * For example, for `UTC+06:00`, this returns `360`; for `UTC-05:30`, this returns `-330`.\n\t *\n\t * @returns The system's UTC offset in minutes, matching the sign convention used in `±HH:mm`.\n\t */\n\tgetUTCOffsetMinutes(): number {\n\t\treturn -this.#date.getTimezoneOffset();\n\t}\n\n\t/**\n\t * @instance Returns the current `Chronos` instance's UTC offset in minutes.\n\t *\n\t * This reflects the parsed or stored offset used internally by Chronos and follows the same\n\t * sign convention: positive for timezones ahead of UTC, negative for behind.\n\t *\n\t * @returns The UTC offset in minutes maintaining the current timezone regardless of system having different one.\n\t */\n\tgetTimeZoneOffsetMinutes(): number {\n\t\treturn extractMinutesFromUTC(this.#offset);\n\t}\n\n\t/** @instance Returns new Chronos instance in UTC */\n\ttoUTC(): Chronos {\n\t\tif (this.#offset === 'UTC+00:00') {\n\t\t\treturn this.#withOrigin('toUTC');\n\t\t}\n\n\t\tconst date = this.#date;\n\n\t\tconst previousOffset = this.getTimeZoneOffsetMinutes();\n\n\t\tconst utc = new Date(date.getTime() - previousOffset * 60 * 1000);\n\n\t\treturn new Chronos(utc).#withOrigin('toUTC');\n\t}\n\n\t/** @instance Returns new Chronos instance in local time */\n\ttoLocal(): Chronos {\n\t\tconst previousOffset = this.getTimeZoneOffsetMinutes();\n\n\t\tconst localOffset = -this.#date.getTimezoneOffset();\n\n\t\tconst relativeOffset = previousOffset - localOffset;\n\n\t\tconst localTime = new Date(\n\t\t\tthis.#date.getTime() - relativeOffset * 60 * 1000,\n\t\t);\n\n\t\treturn new Chronos(localTime).#withOrigin('toLocal');\n\t}\n\n\t/**\n\t * @static Parses a date string with a given format (limited support only).\n\t *\n\t * * **Supported format tokens**:\n\t * - `YYYY`: Full year (e.g., 2023)\n\t * - `YY`: Two-digit year (e.g., 23 for 2023, 99 for 1999)\n\t * - `MM`: Month (01-12)\n\t * - `M`: Month (1-9)\n\t * - `DD`: Day of the month (01-31)\n\t * - `D`: Day of the month (1-9)\n\t * - `HH`: Hour (00-23)\n\t * - `H`: Hour (0-9)\n\t * - `mm`: Minute (00-59)\n\t * - `m`: Minute (0-9)\n\t * - `ss`: Second (00-59)\n\t * - `s`: Second (0-9)\n\t *\n\t * **Example**:\n\t * ```ts\n\t * Chronos.parse('23-12-31 15:30:45', 'YY-MM-DD HH:mm:ss');\n\t * // returns Chronos instance with the parsed date 2023-12-31T15:30:45\n\t * ```\n\t *\n\t * @param dateStr - The date string to be parsed\n\t * @param format - The format of the date string. Tokens like `YYYY`, `MM`, `DD`, `HH`, `mm`, `ss` are used to specify the structure.\n\t * @returns A new `Chronos` instance representing the parsed date.\n\t * @throws `Error` If the date string does not match the format.\n\t */\n\tstatic parse(dateStr: string, format: string): Chronos {\n\t\tconst tokenPatterns: Record<string, string> = {\n\t\t\tYYYY: '(?<YYYY>\\\\d{4})',\n\t\t\tYY: '(?<YY>\\\\d{2})',\n\t\t\tMM: '(?<MM>\\\\d{2})',\n\t\t\tM: '(?<M>\\\\d{1,2})',\n\t\t\tDD: '(?<DD>\\\\d{2})',\n\t\t\tD: '(?<D>\\\\d{1,2})',\n\t\t\tHH: '(?<HH>\\\\d{2})',\n\t\t\tH: '(?<H>\\\\d{1,2})',\n\t\t\tmm: '(?<mm>\\\\d{2})',\n\t\t\tm: '(?<m>\\\\d{1,2})',\n\t\t\tss: '(?<ss>\\\\d{2})',\n\t\t\ts: '(?<s>\\\\d{1,2})',\n\t\t};\n\n\t\tconst tokenToComponent: Record<string, keyof ChronosDateParts> = {\n\t\t\tYYYY: 'year',\n\t\t\tYY: 'year',\n\t\t\tMM: 'month',\n\t\t\tM: 'month',\n\t\t\tDD: 'date',\n\t\t\tD: 'date',\n\t\t\tHH: 'hour',\n\t\t\tH: 'hour',\n\t\t\tmm: 'minute',\n\t\t\tm: 'minute',\n\t\t\tss: 'second',\n\t\t\ts: 'second',\n\t\t};\n\n\t\ttype ChronosDateParts = {\n\t\t\tyear: number;\n\t\t\tmonth: number;\n\t\t\tdate: number;\n\t\t\thour: number;\n\t\t\tminute: number;\n\t\t\tsecond: number;\n\t\t};\n\n\t\tconst tokenRegex = new RegExp(\n\t\t\tObject.keys(tokenPatterns).join('|'),\n\t\t\t'g',\n\t\t);\n\n\t\tconst trimmedInput = dateStr.trim();\n\n\t\tconst regexStr = format\n\t\t\t.trim()\n\t\t\t.replace(tokenRegex, (token) => tokenPatterns[token] ?? token)\n\t\t\t.replace(/\\s+/g, '\\\\s*');\n\n\t\tconst match = new RegExp(`^${regexStr}\\\\s*$`).exec(trimmedInput);\n\n\t\tif (!match?.groups) {\n\t\t\tthrow new Error('Invalid date format');\n\t\t}\n\n\t\tconst parts: Partial<ChronosDateParts> = {};\n\n\t\tfor (const [token, value] of Object.entries(match.groups)) {\n\t\t\tconst key = tokenToComponent[token];\n\t\t\tif (key) {\n\t\t\t\tlet num = Number(value);\n\t\t\t\tif (token === 'YY') num += num < 100 ? 2000 : 0;\n\t\t\t\tparts[key] = num;\n\t\t\t}\n\t\t}\n\n\t\treturn new Chronos(\n\t\t\tnew Date(\n\t\t\t\tparts?.year ?? 1970,\n\t\t\t\t(parts?.month ?? 1) - 1,\n\t\t\t\tparts?.date ?? 1,\n\t\t\t\tparts?.hour ?? 0,\n\t\t\t\tparts?.minute ?? 0,\n\t\t\t\tparts?.second ?? 0,\n\t\t\t),\n\t\t).#withOrigin('parse');\n\t}\n\n\t/**\n\t * @instance Rounds the current date-time to the nearest specified unit and interval.\n\t *\n\t * - *Rounding is based on proximity to the start or end of the specified unit.*\n\t * - *For example, rounding `2025-05-23` by 'day' returns either midnight of May 23 or May 24, depending on the time of day.*\n\t *\n\t * @param unit - The time unit to round to (`year`, `month`, `week`, `day`, `hour`, `minute`, `second`, `millisecond`).\n\t * @param nearest - Optional granularity of rounding. (Defaults to `1`).\n\t *\n\t * @returns A new `Chronos` instance at the nearest rounded point in time. For wrong unit returns current instance.\n\t *\n\t * @remarks\n\t * - Rounding for `'month'` is based on how far into the month the date is. If past the midpoint, it rounds to the next month.\n\t * - Month indices are 0-based internally (January = 0), but the resulting date reflects the correct calendar month.\n\t * - For `'week'` unit, rounding is performed by comparing proximity to the start and end of the ISO week (Monday to Sunday).\n\t * - If the date is closer to the next Monday, it rounds forward; otherwise, it rounds back to the previous Monday.\n\t */\n\tround(unit: TimeUnit, nearest = 1): Chronos {\n\t\tconst date = new Date(this.#date);\n\n\t\tswitch (unit) {\n\t\t\tcase 'millisecond': {\n\t\t\t\tconst rounded = roundToNearest(date.getMilliseconds(), nearest);\n\n\t\t\t\tdate.setMilliseconds(rounded);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'second': {\n\t\t\t\tconst fullSecond =\n\t\t\t\t\tdate.getSeconds() + date.getMilliseconds() / 1000;\n\n\t\t\t\tconst rounded = roundToNearest(fullSecond, nearest);\n\t\t\t\tdate.setSeconds(rounded, 0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'minute': {\n\t\t\t\tconst fullMinute =\n\t\t\t\t\tdate.getMinutes() +\n\t\t\t\t\tdate.getSeconds() / 60 +\n\t\t\t\t\tdate.getMilliseconds() / 60000;\n\n\t\t\t\tconst rounded = roundToNearest(fullMinute, nearest);\n\t\t\t\tdate.setMinutes(rounded, 0, 0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'hour': {\n\t\t\t\tconst fullHour =\n\t\t\t\t\tdate.getHours() +\n\t\t\t\t\tdate.getMinutes() / 60 +\n\t\t\t\t\tdate.getSeconds() / 3600 +\n\t\t\t\t\tdate.getMilliseconds() / 3600000;\n\n\t\t\t\tconst rounded = roundToNearest(fullHour, nearest);\n\t\t\t\tdate.setHours(rounded, 0, 0, 0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'day': {\n\t\t\t\tconst fullDay =\n\t\t\t\t\tdate.getDate() +\n\t\t\t\t\t(date.getHours() / 24 +\n\t\t\t\t\t\tdate.getMinutes() / 1440 +\n\t\t\t\t\t\tdate.getSeconds() / 86400 +\n\t\t\t\t\t\tdate.getMilliseconds() / 86400000);\n\n\t\t\t\tconst rounded = roundToNearest(fullDay, nearest);\n\t\t\t\tdate.setDate(rounded);\n\t\t\t\tdate.setHours(0, 0, 0, 0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'week': {\n\t\t\t\tconst weekday = this.#date.getDay(); // 0 (Sun) to 6 (Sat)\n\t\t\t\tconst offsetToMonday = (weekday + 6) % 7; // 0 for Mon, 1 for Tue, ..., 6 for Sun\n\n\t\t\t\tconst startOfWeek = new Date(this.#date);\n\t\t\t\tstartOfWeek.setDate(startOfWeek.getDate() - offsetToMonday);\n\t\t\t\tstartOfWeek.setHours(0, 0, 0, 0);\n\n\t\t\t\tconst endOfWeek = new Date(startOfWeek);\n\t\t\t\tendOfWeek.setDate(endOfWeek.getDate() + 7);\n\n\t\t\t\tconst diffToStart = Math.abs(\n\t\t\t\t\tthis.#date.getTime() - startOfWeek.getTime(),\n\t\t\t\t);\n\n\t\t\t\tconst diffToEnd = Math.abs(\n\t\t\t\t\tendOfWeek.getTime() - this.#date.getTime(),\n\t\t\t\t);\n\n\t\t\t\tconst rounded =\n\t\t\t\t\tdiffToEnd < diffToStart ? endOfWeek : startOfWeek;\n\n\t\t\t\treturn new Chronos(rounded).#withOrigin('round');\n\t\t\t}\n\n\t\t\tcase 'month': {\n\t\t\t\tconst fullMonth =\n\t\t\t\t\tdate.getMonth() + date.getDate() / this.lastDateOfMonth;\n\n\t\t\t\tconst roundedMonth = roundToNearest(fullMonth, nearest);\n\t\t\t\tdate.setMonth(roundedMonth, 1);\n\t\t\t\tdate.setHours(0, 0, 0, 0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'year': {\n\t\t\t\tconst dayOfYear = Math.floor(\n\t\t\t\t\t(date.getTime() -\n\t\t\t\t\t\tnew Date(date.getFullYear(), 0, 1).getTime()) /\n\t\t\t\t\t\t86400000,\n\t\t\t\t);\n\n\t\t\t\tconst isLeap =\n\t\t\t\t\tnew Date(date.getFullYear(), 1, 29).getDate() === 29;\n\n\t\t\t\tconst totalDays = isLeap ? 366 : 365;\n\t\t\t\tconst fullYear = date.getFullYear() + dayOfYear / totalDays;\n\t\t\t\tconst roundedYear = roundToNearest(fullYear, nearest);\n\t\t\t\tdate.setFullYear(roundedYear, 0, 1);\n\t\t\t\tdate.setHours(0, 0, 0, 0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn this;\n\t\t}\n\n\t\treturn new Chronos(date).#withOrigin('round');\n\t}\n\n\t/**\n\t * @instance Returns the full time duration breakdown between current input (start) and another time (to).\n\t * @param toTime The time to compare with. Defaults to now.\n\t * @param absolute If true, returns all values as positive numbers. Defaults to `true`.\n\t * @returns An object of time units: years, months, days, hours, minutes, seconds, milliseconds.\n\t */\n\tduration(toTime?: ChronosInput, absolute = true): TimeDuration {\n\t\tconst now = this.#date;\n\t\tconst target = this.#toNewDate(toTime);\n\n\t\tconst isFuture = target > now;\n\t\tconst from = isFuture ? now : target;\n\t\tconst to = isFuture ? target : now;\n\n\t\tlet years = to.getFullYear() - from.getFullYear();\n\t\tlet months = to.getMonth() - from.getMonth();\n\t\tlet days = to.getDate() - from.getDate();\n\t\tlet hours = to.getHours() - from.getHours();\n\t\tlet minutes = to.getMinutes() - from.getMinutes();\n\t\tlet seconds = to.getSeconds() - from.getSeconds();\n\t\tlet milliseconds = to.getMilliseconds() - from.getMilliseconds();\n\n\t\tif (milliseconds < 0) {\n\t\t\tmilliseconds += 1000;\n\t\t\tseconds--;\n\t\t}\n\n\t\tif (seconds < 0) {\n\t\t\tseconds += 60;\n\t\t\tminutes--;\n\t\t}\n\n\t\tif (minutes < 0) {\n\t\t\tminutes += 60;\n\t\t\thours--;\n\t\t}\n\n\t\tif (hours < 0) {\n\t\t\thours += 24;\n\t\t\tdays--;\n\t\t}\n\n\t\tif (days < 0) {\n\t\t\tconst prevMonth = new Date(to.getFullYear(), to.getMonth(), 0);\n\t\t\tdays += prevMonth.getDate();\n\t\t\tmonths--;\n\t\t}\n\n\t\tif (months < 0) {\n\t\t\tmonths += 12;\n\t\t\tyears--;\n\t\t}\n\n\t\tconst result: TimeDuration = {\n\t\t\tyears,\n\t\t\tmonths,\n\t\t\tdays,\n\t\t\thours,\n\t\t\tminutes,\n\t\t\tseconds,\n\t\t\tmilliseconds,\n\t\t};\n\n\t\treturn this.#normalizeDuration(result, absolute, isFuture);\n\t}\n\n\t/**\n\t * @static Returns the current date and time in a specified format in local time.\n\t * * Default format is dd, `mmm DD, YYYY HH:mm:ss` = `Sun, Apr 06, 2025 16:11:55`\n\t * @param options - Configure format string and whether to format using utc offset.\n\t * @returns Formatted date string in desired format.\n\t */\n\tstatic today(options?: FormatOptions): string {\n\t\tconst { format = 'dd, mmm DD, YYYY HH:mm:ss', useUTC = false } =\n\t\t\toptions || {};\n\t\tconst today = new Date();\n\t\treturn new Chronos(today).#format(format, useUTC);\n\t}\n\n\t/**\n\t * @static Returns a new `Chronos` instance representing yesterday's date.\n\t *\n\t * @returns A `Chronos` instance for the previous calendar day.\n\t */\n\tstatic yesterday(): Chronos {\n\t\tconst today = new Date();\n\n\t\tconst yesterday = today.setDate(today.getDate() - 1);\n\n\t\treturn new Chronos(yesterday).#withOrigin('yesterday');\n\t}\n\n\t/**\n\t * @static Returns a new `Chronos` instance representing tomorrow's date.\n\t *\n\t * @returns A `Chronos` instance for the next calendar day.\n\t */\n\tstatic tomorrow(): Chronos {\n\t\tconst today = new Date();\n\n\t\tconst yesterday = today.setDate(today.getDate() + 1);\n\n\t\treturn new Chronos(yesterday).#withOrigin('tomorrow');\n\t}\n\n\t/**\n\t * @static Returns the number of milliseconds elapsed since midnight, January 1, 1970 Universal Coordinated Time (UTC).\n\t * * It basically calls `Date.now()`.\n\t * @returns The number of milliseconds elapsed since the Unix epoch.\n\t */\n\tstatic now(): number {\n\t\treturn Date.now();\n\t}\n\n\t/**\n\t * @static Creates a UTC-based Chronos instance.\n\t * If no date is provided, it uses the current date and time.\n\t *\n\t * **This is the base time, meaning conversion in other timezone will consider UTC time as the base time.**\n\t *\n\t * @param dateLike Optional input date to base the UTC time on.\n\t * If omitted, the current system date/time is used.\n\t * @returns A new Chronos instance representing the UTC equivalent of the input.\n\t */\n\tstatic utc(dateLike?: ChronosInput): Chronos {\n\t\tconst chronos = new Chronos(dateLike);\n\n\t\tif (chronos.#offset === 'UTC+00:00') {\n\t\t\treturn chronos.#withOrigin('utc');\n\t\t}\n\n\t\tconst previousOffset = chronos.getTimeZoneOffsetMinutes();\n\n\t\tconst date = chronos.#date;\n\n\t\tconst utc = new Date(date.getTime() - previousOffset * 60 * 1000);\n\n\t\treturn new Chronos(utc).#withOrigin('utc');\n\t}\n\n\t/**\n\t * @static Formats a time-only string into a formatted time string.\n\t *\n\t * @param time - Time string to be formatted. Supported formats include:\n\t * - `HH:mm` → e.g., `'14:50'`\n\t * - `HH:mm:ss` → e.g., `'14:50:00'`\n\t * - `HH:mm:ss.mss` → e.g., `'14:50:00.800'`\n\t * - `HH:mm+TimeZoneOffset(HH)` → e.g., `'14:50+06'`\n\t * - `HH:mm+TimeZoneOffset(HH:mm)` → e.g., `'14:50+06:00'`\n\t * - `HH:mm:ss+TimeZoneOffset(HH)` → e.g., `'14:50:00+06'`\n\t * - `HH:mm:ss+TimeZoneOffset(HH:mm)` → e.g., `'14:50:00+05:30'`\n\t * - `HH:mm:ss.mss+TimeZoneOffset(HH)` → e.g., `'14:50:00.800+06'`\n\t * - `HH:mm:ss.mss+TimeZoneOffset(HH:mm)` → e.g., `'14:50:00.800+06:30'`\n\t *\n\t * * *Input will default to today's date and assume local timezone if no offset is provided.*\n\t *\n\t * @param format - Format string accepted by `formatStrict()` method (`TimeParts`). Default: `hh:mm:ss a` → 02:33:36 pm.\n\t * @returns Formatted time string in local (System) time.\n\t */\n\tstatic formatTimePart(time: string, format?: TimeParts) {\n\t\tfunction normalizeOffset(timeStr: string): string {\n\t\t\treturn timeStr.replace(/([+-]\\d{2})(?!:)/, '$1:00');\n\t\t}\n\n\t\tconst timeWithDate = `${new Chronos().#format('YYYY-MM-DD')}T${normalizeOffset(\n\t\t\ttime,\n\t\t)}`;\n\n\t\treturn new Chronos(timeWithDate).formatStrict(format ?? 'hh:mm:ss a');\n\t}\n\n\t/**\n\t * @static Returns earliest Chronos\n\t * @param dates Date inputs.\n\t */\n\tstatic min(...dates: ChronosInput[]): Chronos {\n\t\treturn new Chronos(\n\t\t\tMath.min(...dates.map((d) => new Chronos(d).valueOf())),\n\t\t).#withOrigin('min');\n\t}\n\n\t/**\n\t * @static Returns latest Chronos\n\t * @param dates Date inputs.\n\t */\n\tstatic max(...dates: ChronosInput[]): Chronos {\n\t\treturn new Chronos(\n\t\t\tMath.max(...dates.map((d) => new Chronos(d).valueOf())),\n\t\t).#withOrigin('max');\n\t}\n\n\t/**\n\t * @static Checks if the year in the date string or year (from 0 - 9999) is a leap year.\n\t * - A year is a leap year if it is divisible by 4, but not divisible by 100, unless it is also divisible by 400.\n\t * - For example, 2000 and 2400 are leap years, but 1900 and 2100 are not.\n\t *\n\t * @description\n\t * This method accepts different types of date inputs and extracts the year to check if it's a leap year.\n\t * If the provided date is a `number`, it will be treated as a year (must be a valid year from 0 to 9999).\n\t * If the year is out of this range (negative or larger than 9999), it will be treated as a Unix timestamp.\n\t * If the provided date is a string or a `Date` object, it will be parsed and the year will be extracted.\n\t * If a `Chronos` instance is passed, the year will be directly accessed from the instance.\n\t *\n\t * @param date - A `number` (year or Unix timestamp), `string`, `Date`, or `Chronos` instance representing a date.\n\t * @returns `true` if the year is a leap year, `false` otherwise.\n\t */\n\tstatic isLeapYear(date: ChronosInput): boolean {\n\t\tlet year: number;\n\n\t\tif (typeof date === 'number') {\n\t\t\tif (date > 0 && date <= 9999) {\n\t\t\t\tyear = date;\n\t\t\t} else {\n\t\t\t\tyear = new Chronos(date).year;\n\t\t\t}\n\t\t} else {\n\t\t\tyear = date instanceof Chronos ? date.year : new Chronos(date).year;\n\t\t}\n\n\t\treturn isLeapYear(year);\n\t}\n\n\t/**\n\t * @static Checks if the given value is a valid `Date` object.\n\t * - A value is considered valid if it is an instance of the built-in `Date` class.\n\t * - This does not check whether the date itself is valid (e.g., `new Date('invalid')`).\n\t * @param value - The value to test.\n\t * @returns `true` if the value is a valid Date object, otherwise `false`.\n\t */\n\tstatic isValidDate(value: unknown): value is Date {\n\t\treturn value instanceof Date;\n\t}\n\n\t/**\n\t * @static Checks if the given value is a valid date string.\n\t * - A value is considered a valid date string if it is a string and can be parsed by `Date.parse()`.\n\t * - This uses the native JavaScript date parser internally.\n\t * @param value - The value to test.\n\t * @returns `true` if the value is a valid date string, otherwise `false`.\n\t */\n\tstatic isDateString(value: unknown): value is string {\n\t\treturn isString(value) && !isNaN(Date.parse(value));\n\t}\n\n\t/**\n\t * @static Checks if the given value is an instance of `Chronos`.\n\t * - Useful for verifying Chronos objects in type guards or validations.\n\t * @param value - The value to test.\n\t * @returns `true` if the value is an instance of `Chronos`, otherwise `false`.\n\t */\n\tstatic isValidChronos(value: unknown): value is Chronos {\n\t\treturn value instanceof Chronos;\n\t}\n}\n","import { Chronos } from './Chronos';\nimport type { ChronosInput, ChronosStatics } from './types';\n\n/**\n * * Converts a date into a Chronos object and access to all `Chronos` methods and properties.\n *\n * **Note**: *If a date is provided **without a time component**, the instance will default to `00:00:00.000` UTC\n * and convert it to the **equivalent local time** using the current environment's UTC offset.*\n *\n * @description\n * This function serves as a wrapper around the `Chronos` class constructor and allows you to create a new `Chronos` instance from various types of date representations.\n * The following types of input are supported:\n *\n * - **`string`**: A string representing a date, which can be parsed by the JavaScript `Date` constructor.\n * Example: `\"2023-12-31\"`.\n * - **`number`**: A timestamp representing the number of milliseconds since the Unix epoch.\n * Example: `1672531199000`.\n * - **`Date`**: A JavaScript `Date` object.\n * - **`Chronos`**: A `Chronos` instance created by the same constructor.\n * - **`year, month, date, hours, minutes, seconds, milliseconds`**: Individual components of a date-time to construct a `Chronos` instance.\n * - **`year`**: A number representing the year. If the year is between 0 and 99, it will be assumed to be the year 1900 + the provided year.\n * - **`month`**: A number between 1 and 12 representing the month (1 for January, 12 for December). It is adjusted internally to a 0-based index (0 for January, 11 for December).\n * - **`date`**: A number between 1 and 31 representing the day of the month.\n * - **`hours`**: A number between 0 and 23 representing the hour of the day.\n * - **`minutes`**: A number between 0 and 59 representing the minutes past the hour.\n * - **`seconds`**: A number between 0 and 59 representing the seconds past the minute.\n * - **`milliseconds`**: A number between 0 and 999 representing the milliseconds past the second.\n *\n * This function also allows you to access static methods from the `Chronos` class, as it copies all static methods from `Chronos` to the `chronos` function itself.\n * Therefore, static methods can be called either through the `Chronos` class directly or through the `chronos` function.\n *\n * @example\n * Example usage:\n *\n * ```ts\n * const chronosInstanceFn = chronos(\"2023-12-31\");\n * const chronosInstanceClass = new Chronos(\"2023-12-31\");\n * const sameInstanceFn = chronos.parse(\"2023-12-31\", \"YYYY-MM-DD\");\n * const sameInstanceClass = Chronos.parse(\"2023-12-31\", \"YYYY-MM-DD\");\n * ```\n *\n * @param valueOrYear The value in number, string, Date or Chronos format or the full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year.\n * @param month The month as a number between 1 and 12 (January to December).\n * @param date The date as a number between 1 and 31.\n * @param hours Must be supplied if minutes is supplied. A number from 0 to 23 (midnight to 11pm) that specifies the hour.\n * @param minutes Must be supplied if seconds is supplied. A number from 0 to 59 that specifies the minutes.\n * @param seconds Must be supplied if milliseconds is supplied. A number from 0 to 59 that specifies the seconds.\n * @param ms A number from 0 to 999 that specifies the milliseconds.\n *\n * @returns new `Chronos` instance representing the provided date with all methods and properties.\n *\n * @static\n * @remarks\n * Static methods can be accessed from both the `Chronos` class and the `chronos` function.\n * Static methods from the `Chronos` class are copied over to the `chronos` function, so you can call them like:\n * ```ts\n * chronos.parse(\"2023-12-31\", \"YYYY-MM-DD\");\n * // Or\n * Chronos.parse(\"2023-12-31\", \"YYYY-MM-DD\");\n * ```\n */\nconst chronos = /* @__PURE__ */ (\n\tvalueOrYear?: ChronosInput,\n\tmonth?: number,\n\tdate?: number,\n\thours?: number,\n\tminutes?: number,\n\tseconds?: number,\n\tms?: number,\n) => {\n\tlet newChronos: Chronos;\n\n\tif (typeof valueOrYear === 'number' && typeof month === 'number') {\n\t\tnewChronos = new Chronos(\n\t\t\tvalueOrYear,\n\t\t\tmonth,\n\t\t\tdate ?? 1,\n\t\t\thours ?? 0,\n\t\t\tminutes ?? 0,\n\t\t\tseconds ?? 0,\n\t\t\tms ?? 0,\n\t\t);\n\t} else {\n\t\tnewChronos = /* @__PURE__ */ new Chronos(valueOrYear);\n\t}\n\n\treturn newChronos;\n};\n\n/**\n * @remarks\n * Static methods from the `Chronos` class are copied over to the `chronos` function.\n * Therefore, you can access static methods from `Chronos` both through the `Chronos` class and the `chronos` function.\n *\n * **Note**: *If a date is provided **without a time component**, the instance will default to `00:00:00.000` UTC\n * and convert it to the **equivalent local time** using the current environment's UTC offset.*\n *\n * Example usage:\n * ```ts\n * chronos.parse(\"2023-12-31\", \"YYYY-MM-DD\");\n * // Or\n * Chronos.parse(\"2023-12-31\", \"YYYY-MM-DD\");\n * ```\n *\n * *No need to call `chronos` for accessing the static methods. Simply call the static methods.*\n *\n * **Available Static Methods:**\n *\n * ```ts\n * today(options?: FormatOptions): string\n * yesterday(): Chronos;\n * tomorrow(): Chronos\n * now(): number\n * parse(dateStr: string, format: string): Chronos\n * utc(dateLike: ChronosInput): Chronos\n * min(...dates: ChronosInput[]): Chronos\n * max(...dates: ChronosInput[]): Chronos\n * isLeapYear(date: ChronosInput): boolean\n * isValidDate(value: unknown): boolean\n * isDateString(value: unknown): boolean\n * isValidChronos(value: unknown): boolean\n * formatTimePart(time: string, format?: TimeParts): string\n * ```\n */\nconst typedChronos = /* @__PURE__ */ chronos as ChronosStatics;\n\n// ? Add static methods from Chronos class to the chronos function\n// Object.getOwnPropertyNames(Chronos).forEach((method) => {\n// \t// Exclude non-method properties like `length`, `name`, `prototype`\n// \tif (method !== 'prototype' && method !== 'name' && method !== 'length') {\n// \t\t(chronos as Any)[method] = (Chronos as Any)[method];\n// \t}\n// });\n\ntypedChronos.now = Chronos.now;\ntypedChronos.min = Chronos.min;\ntypedChronos.max = Chronos.max;\ntypedChronos.utc = Chronos.utc;\ntypedChronos.parse = Chronos.parse;\ntypedChronos.today = Chronos.today;\ntypedChronos.tomorrow = Chronos.tomorrow;\ntypedChronos.yesterday = Chronos.yesterday;\ntypedChronos.isLeapYear = Chronos.isLeapYear;\ntypedChronos.isValidDate = Chronos.isValidDate;\ntypedChronos.isDateString = Chronos.isDateString;\ntypedChronos.isValidChronos = Chronos.isValidChronos;\ntypedChronos.formatTimePart = Chronos.formatTimePart;\n\nexport { typedChronos as chronos };\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/date/constants.ts","../src/date/Chronos.ts","../src/date/chronos-fn.ts"],"names":["__name","getOrdinal","isValidUTCOffSet","extractMinutesFromUTC","formatUTCOffset","isLeapYear","isPalindrome","formatUnitWithPlural","roundToNearest","chronos","isString"],"mappings":"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","file":"chronos.js","sourcesContent":["import type { DayPart, Hours, UTCOffSet } from './types';\n\nexport const DAYS = /* @__PURE__ */ Object.freeze([\n\t'Sunday',\n\t'Monday',\n\t'Tuesday',\n\t'Wednesday',\n\t'Thursday',\n\t'Friday',\n\t'Saturday',\n] as const);\n\nexport const MONTHS = /* @__PURE__ */ Object.freeze([\n\t'January',\n\t'February',\n\t'March',\n\t'April',\n\t'May',\n\t'June',\n\t'July',\n\t'August',\n\t'September',\n\t'October',\n\t'November',\n\t'December',\n] as const);\n\nexport const YEAR_FORMATS = /* @__PURE__ */ Object.freeze([\n\t'YYYY',\n\t'YY',\n\t'yyyy',\n\t'yy',\n] as const);\n\nexport const MONTH_FORMATS = /* @__PURE__ */ Object.freeze([\n\t'M',\n\t'MM',\n\t'mmm',\n\t'mmmm',\n] as const);\n\nexport const DATE_FORMATS = /* @__PURE__ */ Object.freeze([\n\t'DD',\n\t'D',\n\t'Do',\n] as const);\n\nexport const DAY_FORMATS = /* @__PURE__ */ Object.freeze([\n\t'd',\n\t'dd',\n\t'ddd',\n] as const);\n\nexport const HOUR_FORMATS = /* @__PURE__ */ Object.freeze([\n\t'H',\n\t'HH',\n\t'hh',\n\t'h',\n] as const);\n\nexport const MINUTE_FORMATS = /* @__PURE__ */ Object.freeze([\n\t'mm',\n\t'm',\n] as const);\n\nexport const SECOND_FORMATS = /* @__PURE__ */ Object.freeze([\n\t'ss',\n\t's',\n] as const);\n\nexport const MILLISECOND_FORMATS = /* @__PURE__ */ Object.freeze([\n\t'ms',\n\t'mss',\n] as const);\n\nexport const TIME_FORMATS = /* @__PURE__ */ Object.freeze(['a', 'A'] as const);\n\nexport const sortedFormats = /* @__PURE__ */ Object.freeze(\n\t[\n\t\t...YEAR_FORMATS,\n\t\t...MONTH_FORMATS,\n\t\t...DAY_FORMATS,\n\t\t...DATE_FORMATS,\n\t\t...HOUR_FORMATS,\n\t\t...MINUTE_FORMATS,\n\t\t...SECOND_FORMATS,\n\t\t...MILLISECOND_FORMATS,\n\t\t...TIME_FORMATS,\n\t].sort((a, b) => b.length - a.length),\n);\n\nexport const TIME_ZONES = /* @__PURE__ */ Object.freeze({\n\t// UTC -12:00 to -01:00 (Mostly Pacific Islands, Americas)\n\t/** International Date Line West (Baker Island, Howland Island) */\n\tIDLW: -12 * 60,\n\t/** Baker Island Time (Uninhabited) */\n\tBIT: -12 * 60,\n\t/** Samoa Standard Time (American Samoa, Midway) */\n\tSST: -11 * 60,\n\t/** Niue Time */\n\tNUT: -11 * 60,\n\t/** Hawaii-Aleutian Standard Time (USA-Hawaii) */\n\tHST: -10 * 60,\n\t/** Cook Island Time */\n\tCKT: -10 * 60,\n\t/** Tahiti Time (French Polynesia) */\n\tTAHT: -10 * 60,\n\t/** Alaska Standard Time (USA-Alaska) */\n\tAKST: -9 * 60,\n\t/** Gambier Time (French Polynesia) */\n\tGAMT: -9 * 60,\n\t/** Paraguay Time (Summer UTC-3) */\n\tPYT: -9 * 60,\n\t/** Marquesas Islands Time (UTC−09:30) */\n\tMART: -9.5 * 60,\n\t/** Hawaii-Aleutian Daylight Time (USA-Hawaii, DST) */\n\tHDT: -9 * 60,\n\t/** Pacific Standard Time (USA-West Coast, Canada) */\n\tPST: -8 * 60,\n\t/** Alaska Daylight Time (USA-Alaska, DST) */\n\tAKDT: -8 * 60,\n\t/** Mountain Standard Time (USA/Canada Rockies) */\n\tMST: -7 * 60,\n\t/** Mountain Daylight Time (USA/Canada Rockies, DST) */\n\tMDT: -6 * 60,\n\t/** Pacific Daylight Time (USA-West Coast, Canada, DST) */\n\tPDT: -7 * 60,\n\t/** Central Standard Time (USA/Canada Central) */\n\tCST: -6 * 60,\n\t/** Central Daylight Time (USA/Canada Central, DST) */\n\tCDT: -5 * 60,\n\t/** Easter Island Time (Chile) */\n\tEAST: -6 * 60,\n\t/** Eastern Standard Time (USA/Canada East Coast) */\n\tEST: -5 * 60,\n\t/** Eastern Daylight Time (USA/Canada East Coast, DST) */\n\tEDT: -4 * 60,\n\t/** Peru Time */\n\tPET: -5 * 60,\n\t/** Colombia Time */\n\tCOT: -5 * 60,\n\t/** Acre Time (Brazil-West) */\n\tACT: -5 * 60,\n\t/** Atlantic Standard Time (Canada-Maritime, Caribbean) */\n\tAST: -4 * 60,\n\t/** Bolivia Time */\n\tBOT: -4 * 60,\n\t/** Venezuelan Standard Time */\n\tVET: -4 * 60,\n\t/** Guyana Time */\n\tGYT: -4 * 60,\n\t/** Chile Standard Time */\n\tCLT: -4 * 60,\n\t/** Atlantic Daylight Time (Canada-Maritime, DST) */\n\tADT: -3 * 60,\n\t/** Brasília Time (Brazil-East) */\n\tBRT: -3 * 60,\n\t/** Argentina Time */\n\tART: -3 * 60,\n\t/** Uruguay Time */\n\tUYT: -3 * 60,\n\t/** Falkland Islands Summer Time */\n\tFKST: -3 * 60,\n\t/** Saint Pierre and Miquelon Standard Time */\n\tPMST: -3 * 60,\n\t/** Chile Summer Time (DST) */\n\tCLST: -3 * 60,\n\t/** French Guiana Time */\n\tGFT: -3 * 60,\n\t/** Newfoundland Standard Time */\n\tNST: -3.5 * 60,\n\t/** Newfoundland Daylight Time (DST) */\n\tNDT: -2.5 * 60,\n\t/** Fernando de Noronha Time (Brazil) */\n\tFNT: -2 * 60,\n\t/** South Georgia Time */\n\t'GST-South Georgia': -2 * 60,\n\t/** Brazil Summer Time (DST) */\n\tBRST: -2 * 60,\n\t/** Azores Time (Portugal) */\n\tAZOT: -1 * 60,\n\t/** Cape Verde Time */\n\tCVT: -1 * 60,\n\n\t// UTC ±00:00 (Europe, Africa, Greenland)\n\t/** Greenwich Mean Time (UK, Iceland, West Africa) */\n\tGMT: 0,\n\t/** Coordinated Universal Time */\n\tUTC: 0,\n\t/** Western European Time (Portugal, Morocco) */\n\tWET: 0,\n\t/** Eastern Greenland Summer Time */\n\tEGST: 0,\n\t/** Central European Time (France, Germany, Italy) */\n\tCET: 1 * 60,\n\t/** West Africa Time (Nigeria, Algeria) */\n\tWAT: 1 * 60,\n\t/** Middle European Time (Historical) */\n\tMET: 1 * 60,\n\t/** Western European Summer Time (Summer UTC+1) */\n\tWEST: 1 * 60,\n\t/** British Summer Time (UK DST) */\n\t'BST-UK': 1 * 60,\n\t/** Central European Summer Time (DST) */\n\tCEST: 2 * 60,\n\t/** Middle European Summer Time (DST) */\n\tMEST: 2 * 60,\n\n\t// UTC +02:00 to +05:00 (Europe, Africa, Middle East, Russia)\n\t/** Eastern European Time (Greece, Finland, Egypt) */\n\tEET: 2 * 60,\n\t/** Central Africa Time (Sudan, South Africa) */\n\tCAT: 2 * 60,\n\t/** South Africa Standard Time */\n\tSAST: 2 * 60,\n\t/** Israel Standard Time */\n\t'IST-ISRAEL': 2 * 60,\n\t/** Israel Daylight Time (DST) */\n\t'IST-IL': 2 * 60,\n\t/** Eastern European Summer Time */\n\tEEST: 3 * 60,\n\t/** Moscow Time (Russia-West) */\n\tMSK: 3 * 60,\n\t/** Syowa Time (Antarctica) */\n\tSYOT: 3 * 60,\n\t/** Arabia Standard Time (Iraq, Saudi Arabia) */\n\t'AST-ARAB': 3 * 60,\n\t/** East Africa Time (Kenya, Ethiopia) */\n\tEAT: 3 * 60,\n\t/** Iran Standard Time */\n\tIRST: 3.5 * 60,\n\t/** Iran Daylight Time (DST) */\n\tIRDT: 4.5 * 60,\n\t/** Armenia Time */\n\tAMT: 4 * 60,\n\t/** Georgia Time */\n\tGET: 4 * 60,\n\t/** Azerbaijan Time */\n\tAZT: 4 * 60,\n\t/** Mauritius Time */\n\tMUT: 4 * 60,\n\t/** Seychelles Time */\n\tSCT: 4 * 60,\n\t/** Gulf Standard Time (UAE, Oman) */\n\t'GST-GULF': 4 * 60,\n\t/** Samara Time (Russia) */\n\tSAMT: 4 * 60,\n\t/** Pakistan Standard Time */\n\tPKT: 5 * 60,\n\t/** Tajikistan Time */\n\tTJT: 5 * 60,\n\t/** Turkmenistan Time */\n\tTMT: 5 * 60,\n\t/** Uzbekistan Time */\n\tUZT: 5 * 60,\n\t/** Aqtobe Time (Kazakhstan) */\n\tAQTT: 5 * 60,\n\t/** Yekaterinburg Time (Russia) */\n\tYEKT: 5 * 60,\n\t/** Yekaterinburg Summer Time (Russia, DST) */\n\tYEKST: 5 * 60,\n\t/** India Standard Time */\n\t'IST-IN': 5.5 * 60,\n\n\t// UTC +05:30 to +09:00 (South Asia, Russia, Southeast Asia)\n\t/** Nepal Time (UTC+05:45) */\n\tNPT: 5.75 * 60,\n\t/** Nepal Time (alternative) */\n\t'NPT-NEPAL': 5.75 * 60,\n\t/** Bangladesh Time */\n\tBDT: 6 * 60,\n\t/** Bangladesh Standard Time */\n\t'BST-BD': 6 * 60,\n\t/** Bhutan Time */\n\tBTT: 6 * 60,\n\t/** Almaty Time (Kazakhstan) */\n\tALMT: 6 * 60,\n\t/** Omsk Time (Russia) */\n\tOMST: 6 * 60,\n\t/** Myanmar Time */\n\tMMT: 6.5 * 60,\n\t/** Cocos Islands Time */\n\tCCT: 6.5 * 60,\n\t/** Indochina Time (Thailand, Vietnam) */\n\tICT: 7 * 60,\n\t/** Thailand Standard Time */\n\tTHA: 7 * 60,\n\t/** Krasnoyarsk Time (Russia) */\n\tKRAT: 7 * 60,\n\t/** Western Indonesia Time (Jakarta) */\n\tWIB: 7 * 60,\n\t/** Hong Kong Time */\n\tHKT: 8 * 60,\n\t/** China Standard Time */\n\t'CST-CHINA': 8 * 60,\n\t/** Singapore Time */\n\tSGT: 8 * 60,\n\t/** Malaysia Time */\n\tMYT: 8 * 60,\n\t/** Philippines Time */\n\tPHT: 8 * 60,\n\t/** Irkutsk Time (Russia) */\n\tIRKT: 8 * 60,\n\t/** Irkutsk Daylight Time (Russia, DST) */\n\t'IRKT-DST': 9 * 60,\n\t/** Irkutsk Time (Russia, alternative) */\n\t'IRKT-RU': 8 * 60,\n\t/** Australian Western Standard Time */\n\tAWST: 8 * 60,\n\t/** Australian Central Western Standard Time (Eucla, UTC+08:45) */\n\tACWST: 8.75 * 60,\n\t/** Western Indonesia Time (Bali) */\n\tWITA: 8 * 60,\n\t/** Japan Standard Time */\n\tJST: 9 * 60,\n\t/** Korea Standard Time */\n\tKST: 9 * 60,\n\t/** Palau Time */\n\tPWT: 9 * 60,\n\t/** Yakutsk Time (Russia) */\n\tYAKT: 9 * 60,\n\t/** Eastern Indonesia Time (Jayapura) */\n\tWIT: 9 * 60,\n\n\t// UTC +09:30 to +14:00 (Australia, Pacific Islands, Russia)\n\t/** Australian Central Standard Time */\n\tACST: 9.5 * 60,\n\t/** Australian Central Daylight Time (DST) */\n\tACDT: 10.5 * 60,\n\t/** Australian Eastern Standard Time */\n\tAEST: 10 * 60,\n\t/** Australian Eastern Daylight Time (DST) */\n\tAEDT: 11 * 60,\n\t/** Vladivostok Time (Russia) */\n\tVLAT: 10 * 60,\n\t/** Lord Howe Standard Time (UTC+10:30) */\n\tLHST: 10.5 * 60,\n\t/** Lord Howe Daylight Time (DST +30min) */\n\tLHDT: 11 * 60,\n\t/** Sakhalin Time (Russia) */\n\tSAKT: 11 * 60,\n\t/** Magadan Time (Russia) */\n\tMAGT: 11 * 60,\n\t/** Norfolk Time (Australia) */\n\tNFT: 11 * 60,\n\t/** Chamorro Standard Time (Guam, Northern Mariana Islands) */\n\tCHST: 10 * 60,\n\t/** New Zealand Standard Time */\n\tNZST: 12 * 60,\n\t/** New Zealand Daylight Time (DST) */\n\tNZDT: 13 * 60,\n\t/** Fiji Time */\n\tFJT: 12 * 60,\n\t/** Tuvalu Time */\n\tTVT: 12 * 60,\n\t/** Chatham Standard Time (New Zealand) */\n\tCHAST: 12.75 * 60,\n\t/** Chatham Daylight Time (New Zealand, DST) */\n\tCHADT: 13.75 * 60,\n\t/** Chatham Standard Time (alternative) */\n\t'CHAST-NZ': 12.75 * 60,\n\t/** Phoenix Island Time (Kiribati) */\n\tPHOT: 13 * 60,\n\t/** Tokelau Time */\n\tTKT: 13 * 60,\n\t/** Tonga Time */\n\tTOT: 13 * 60,\n\t/** New Zealand Antarctica Time */\n\tNZAT: 13 * 60,\n\t/** Line Islands Time (Kiribati) */\n\tLINT: 14 * 60,\n\n\t// Antarctica (used in research stations)\n\t/** Rothera Time (Antarctica) */\n\tROTT: -3 * 60,\n\t/** Mawson Time (Antarctica) */\n\tMAWT: 5 * 60,\n\t/** Petropavlovsk-Kamchatsky Time (Russia) */\n\tPETT: 12 * 60,\n} as const);\n\nexport const TIME_ZONE_LABELS: Record<UTCOffSet, string> =\n\t/* @__PURE__ */ Object.freeze({\n\t\t'UTC-12:00': 'Baker Island Time', // and Howland Island\n\t\t// 'UTC-11:30': 'Niue Time',\n\t\t// 'UTC-11:00': 'Niue Time',\n\t\t'UTC-11:00': 'Samoa Standard Time',\n\t\t// 'UTC-10:30': 'Marquesas Time',\n\t\t'UTC-10:00': 'Hawaii-Aleutian Standard Time',\n\t\t'UTC-09:30': 'Marquesas Islands Time',\n\t\t'UTC-09:00': 'Alaskan Standard Time',\n\t\t// 'UTC-08:30': 'Pitcairn Standard Time',\n\t\t'UTC-08:00': 'Pacific Standard Time',\n\t\t'UTC-07:30': 'Mountain Standard Time (Unofficial)',\n\t\t'UTC-07:00': 'Mountain Standard Time',\n\t\t'UTC-06:30': 'Central America Time (Unofficial)',\n\t\t'UTC-06:00': 'Central Standard Time',\n\t\t// 'UTC-05:30': 'Venezuelan Standard Time (Historical)',\n\t\t'UTC-05:00': 'Eastern Standard Time',\n\t\t// 'UTC-04:30': 'Venezuelan Standard Time',\n\t\t'UTC-04:00': 'Atlantic Standard Time',\n\t\t'UTC-03:30': 'Newfoundland Standard Time',\n\t\t'UTC-03:00': 'SA Eastern Standard Time',\n\t\t'UTC-02:30': 'Mid-Atlantic Time (Unofficial)',\n\t\t'UTC-02:00': 'Mid-Atlantic Standard Time',\n\t\t'UTC-01:30': 'Azores Time (Unofficial)',\n\t\t'UTC-01:00': 'Cape Verde Time',\n\t\t'UTC+00:00': 'Greenwich Mean Time',\n\t\t'UTC+00:30': 'British Summer Time (Historical)',\n\t\t'UTC+01:00': 'Central European Standard Time',\n\t\t'UTC+01:30': 'Central Africa Time (Unofficial)',\n\t\t'UTC+02:00': 'Eastern European Standard Time',\n\t\t'UTC+02:30': 'Israel Standard Time (Historical)',\n\t\t'UTC+03:00': 'Arab Standard Time',\n\t\t'UTC+03:30': 'Iran Standard Time',\n\t\t'UTC+04:00': 'Gulf Standard Time',\n\t\t'UTC+04:30': 'Afghanistan Time',\n\t\t'UTC+05:00': 'Pakistan Standard Time',\n\t\t'UTC+05:30': 'India Standard Time',\n\t\t'UTC+05:45': 'Nepal Standard Time',\n\t\t'UTC+06:00': 'Bangladesh Standard Time',\n\t\t'UTC+06:30': 'Myanmar Standard Time',\n\t\t'UTC+07:00': 'Indochina Standard Time',\n\t\t'UTC+07:30': 'Western Indonesia Time (Unofficial)',\n\t\t'UTC+08:00': 'China Standard Time',\n\t\t'UTC+08:30': 'North Korea Standard Time',\n\t\t'UTC+08:45': 'South-Western Australia Standard Time',\n\t\t'UTC+09:00': 'Japan Standard Time',\n\t\t'UTC+09:30': 'Central Australia Standard Time',\n\t\t'UTC+10:00': 'Eastern Australia Standard Time',\n\t\t'UTC+10:30': 'Lord Howe Standard Time',\n\t\t'UTC+11:00': 'Central Pacific Standard Time',\n\t\t// 'UTC+11:30': 'Norfolk Island Time',\n\t\t'UTC+12:00': 'New Zealand Standard Time',\n\t\t'UTC+12:45': 'Chatham Islands Time',\n\t\t'UTC+13:00': 'Phoenix Island Time',\n\t\t'UTC+13:45': 'Tokelau Time (Unofficial)',\n\t\t'UTC+14:00': 'Line Islands Time',\n\t} as Record<UTCOffSet, string>);\n\n/** Ranges for day parts. */\nexport const DEFAULT_RANGES: Record<DayPart, [Hours, Hours]> =\n\t/* @__PURE__ */ Object.freeze({\n\t\tnight: ['21', '23'],\n\t\tmidnight: ['00', '01'],\n\t\tlateNight: ['02', '04'],\n\t\tmorning: ['05', '11'],\n\t\tafternoon: ['12', '16'],\n\t\tevening: ['17', '20'],\n\t} as const);\n\nexport const ZODIAC_SIGNS = /* @__PURE__ */ Object.freeze([\n\t['Capricorn', [1, 19]],\n\t['Aquarius', [2, 18]],\n\t['Pisces', [3, 20]],\n\t['Aries', [4, 19]],\n\t['Taurus', [5, 20]],\n\t['Gemini', [6, 20]],\n\t['Cancer', [7, 22]],\n\t['Leo', [8, 22]],\n\t['Virgo', [9, 22]],\n\t['Libra', [10, 22]],\n\t['Scorpio', [11, 21]],\n\t['Sagittarius', [12, 21]],\n\t['Capricorn', [12, 31]],\n] as const);\n","import { isString } from '../guards/primitives';\nimport type { LocaleCode } from '../number/types';\nimport { getOrdinal, roundToNearest } from '../number/utilities';\nimport { formatUnitWithPlural } from '../string/convert';\nimport { isPalindrome } from '../string/guards';\nimport {\n\tDAYS,\n\tDEFAULT_RANGES,\n\tMONTHS,\n\tsortedFormats,\n\tTIME_ZONE_LABELS,\n\tTIME_ZONES,\n\tZODIAC_SIGNS,\n} from './constants';\nimport { isLeapYear, isValidUTCOffSet } from './guards';\nimport type {\n\tChronosFormat,\n\tChronosInput,\n\tChronosMethods,\n\tChronosObject,\n\tDayPart,\n\tDayPartConfig,\n\tFormatOptions,\n\tQuarter,\n\tStrictFormat,\n\tTimeDuration,\n\tTimeParts,\n\tTimeUnit,\n\tTimeZone,\n\tUTCOffSet,\n\tZodiacSign,\n} from './types';\nimport { extractMinutesFromUTC, formatUTCOffset } from './utils';\n\n/**\n * * Creates a new immutable `Chronos` instance.\n *\n * **Note**: *If a date is provided **without a time component**, the instance will default to `00:00:00.000` UTC\n * and convert it to the **equivalent local time** using the current environment's UTC offset.*\n *\n * @param value - A date value (`number`, `string`, `Date`, or `Chronos` object).\n * - If a string is provided, it should be in a format that can be parsed by the Date constructor.\n * - If a number is provided, it should be a timestamp (milliseconds since the Unix epoch).\n * - If a Date object is provided, it will be used as is.\n * - If a Chronos object is provided, it will be converted to a Date object.\n *\n * **It also accepts number values as following:**\n * - **`year, month, date, hours, minutes, seconds, milliseconds`**: Individual components of a date-time to construct a `Chronos` instance.\n * - **`year`**: A number representing the year. If the year is between 0 and 99, it will be assumed to be the year 1900 + the provided year.\n * - **`month`**: A number between 1 and 12 representing the month (1 for January, 12 for December). It is adjusted internally to a 0-based index (0 for January, 11 for December).\n * - **`date`**: A number between 1 and 31 representing the day of the month.\n * - **`hours`**: A number between 0 and 23 representing the hour of the day.\n * - **`minutes`**: A number between 0 and 59 representing the minutes past the hour.\n * - **`seconds`**: A number between 0 and 59 representing the seconds past the minute.\n * - **`milliseconds`**: A number between 0 and 999 representing the milliseconds past the second.\n *\n * @returns Instance of `Chronos` with all methods and properties.\n */\nexport class Chronos {\n\treadonly #date: Date;\n\t#offset: UTCOffSet;\n\t#ORIGIN: ChronosMethods | 'root';\n\t/** Chronos date/time in Native JS `Date` format */\n\tnative: Date;\n\t/** Origin of the `Chronos` instance (Method that created `new Chronos`), useful fo tracking instance. */\n\torigin: ChronosMethods | 'root';\n\n\t/**\n\t * * Creates a new immutable `Chronos` instance.\n\t *\n\t * Accepts no arguments (defaults to now).\n\t *\n\t * @returns Instance of `Chronos` with all methods and properties.\n\t */\n\tconstructor();\n\n\t/**\n\t * * Creates a new immutable `Chronos` instance.\n\t *\n\t * @param value - A date value in `number`, it should be a timestamp (milliseconds since the Unix epoch).\n\t *\n\t * @returns Instance of `Chronos` with all methods and properties.\n\t */\n\tconstructor(value: number);\n\n\t/**\n\t * * Creates a new immutable `Chronos` instance.\n\t *\n\t * **Note**: *If a date is provided **without a time component**, the instance will default to `00:00:00.000` UTC\n\t * and convert it to the **equivalent local time** using the current environment's UTC offset.*\n\t *\n\t * @param value - A date value in `string`, it should be in a format that can be parsed by the `Date` constructor.\n\t *\n\t * @returns Instance of `Chronos` with all methods and properties.\n\t */\n\tconstructor(value: string);\n\n\t/**\n\t * * Creates a new immutable `Chronos` instance.\n\t *\n\t * **Note**: *If a date is provided **without a time component**, the instance will default to `00:00:00.000` UTC\n\t * and convert it to the **equivalent local time** using the current environment's UTC offset.*\n\t *\n\t * @param value - A date value as `Date` object, it will be used as is.\n\t *\n\t * @returns Instance of `Chronos` with all methods and properties.\n\t */\n\tconstructor(value: Date);\n\n\t/**\n\t * * Creates a new immutable `Chronos` instance.\n\t *\n\t * **Note**: *If a date is provided **without a time component**, the instance will default to `00:00:00.000` UTC\n\t * and convert it to the **equivalent local time** using the current environment's UTC offset.*\n\t *\n\t * @param value - A date value as `Chronos` object.\n\t *\n\t * @returns Instance of `Chronos` with all methods and properties.\n\t */\n\tconstructor(value: Chronos);\n\n\t/**\n\t * * Creates a new immutable `Chronos` instance.\n\t *\n\t * **Note**: *If a date is provided **without a time component**, the instance will default to `00:00:00.000` UTC\n\t * and convert it to the **equivalent local time** using the current environment's UTC offset.*\n\t *\n\t * @param year The full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year.\n\t * @param month The month as a number between 1 and 12 (January to December).\n\t * @param date The date as a number between 1 and 31.\n\t * @param hours Must be supplied if minutes is supplied. A number from 0 to 23 (midnight to 11pm) that specifies the hour.\n\t * @param minutes Must be supplied if seconds is supplied. A number from 0 to 59 that specifies the minutes.\n\t * @param seconds Must be supplied if milliseconds is supplied. A number from 0 to 59 that specifies the seconds.\n\t * @param ms A number from 0 to 999 that specifies the milliseconds.\n\t *\n\t * @returns Instance of `Chronos` with all methods and properties.\n\t */\n\tconstructor(\n\t\tyear: number,\n\t\tmonth: number,\n\t\tdate?: number,\n\t\thours?: number,\n\t\tminutes?: number,\n\t\tseconds?: number,\n\t\tms?: number,\n\t);\n\n\t/**\n\t * * Creates a new immutable `Chronos` instance.\n\t *\n\t * **Note**: *If a date is provided **without a time component**, the instance will default to `00:00:00.000` UTC\n\t * and convert it to the **equivalent local time** using the current environment's UTC offset.*\n\t *\n\t * @param value - A date value (`number`, `string`, `Date`, or `Chronos` object).\n\t * - If a string is provided, it should be in a format that can be parsed by the `Date` constructor.\n\t * - If a number is provided, it should be a timestamp (milliseconds since the Unix epoch).\n\t * - If a Date object is provided, it will be used as is.\n\t * - If a Chronos object is provided, it will be used directly.\n\t *\n\t * @returns Instance of `Chronos` with all methods and properties.\n\t */\n\tconstructor(value?: ChronosInput);\n\n\t/**\n\t * * Creates a new immutable `Chronos` instance.\n\t *\n\t * **Note**: *If a date is provided **without a time component**, the instance will default to `00:00:00.000` UTC\n\t * and convert it to the **equivalent local time** using the current environment's UTC offset.*\n\t *\n\t * @param valueOrYear The value in number, string, Date or Chronos format or the full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year.\n\t * @param month The month as a number between 1 and 12 (January to December).\n\t * @param date The date as a number between 1 and 31.\n\t * @param hours Must be supplied if minutes is supplied. A number from 0 to 23 (midnight to 11pm) that specifies the hour.\n\t * @param minutes Must be supplied if seconds is supplied. A number from 0 to 59 that specifies the minutes.\n\t * @param seconds Must be supplied if milliseconds is supplied. A number from 0 to 59 that specifies the seconds.\n\t * @param ms A number from 0 to 999 that specifies the milliseconds.\n\t *\n\t * @returns Instance of `Chronos` with all methods and properties.\n\t */\n\tconstructor(\n\t\tvalueOrYear?: ChronosInput,\n\t\tmonth?: number,\n\t\tdate?: number,\n\t\thours?: number,\n\t\tminutes?: number,\n\t\tseconds?: number,\n\t\tms?: number,\n\t) {\n\t\tif (typeof valueOrYear === 'number' && typeof month === 'number') {\n\t\t\tthis.#date = new Date(\n\t\t\t\tvalueOrYear,\n\t\t\t\tmonth - 1,\n\t\t\t\tdate ?? 1,\n\t\t\t\thours ?? 0,\n\t\t\t\tminutes ?? 0,\n\t\t\t\tseconds ?? 0,\n\t\t\t\tms ?? 0,\n\t\t\t);\n\t\t\tthis.native = this.#date;\n\t\t} else {\n\t\t\tthis.#date = this.#toNewDate(valueOrYear);\n\t\t\tthis.native = this.#date;\n\t\t}\n\n\t\tthis.#ORIGIN = 'root';\n\t\tthis.origin = this.#ORIGIN;\n\t\tthis.#offset = `UTC${this.getUTCOffset()}` as UTCOffSet;\n\t}\n\n\t*[Symbol.iterator](): IterableIterator<[string, number]> {\n\t\tyield ['year', this.year];\n\t\tyield ['month', this.month];\n\t\tyield ['isoMonth', this.month + 1];\n\t\tyield ['date', this.date];\n\t\tyield ['weekDay', this.weekDay];\n\t\tyield ['isoWeekDay', this.weekDay + 1];\n\t\tyield ['hour', this.hour];\n\t\tyield ['minute', this.minute];\n\t\tyield ['second', this.second];\n\t\tyield ['millisecond', this.millisecond];\n\t\tyield ['timestamp', this.timestamp];\n\t\tyield ['unix', this.unix];\n\t}\n\n\t/**\n\t * * Enables primitive coercion like `console.log`, `${chronos}`, etc.\n\t * @param hint - The type hint provided by the JS engine.\n\t * @returns The primitive value based on the hint.\n\t */\n\t[Symbol.toPrimitive](hint: string): string | number {\n\t\tif (hint === 'number') return this.valueOf();\n\t\treturn this.toLocalISOString();\n\t}\n\n\t[Symbol.replace](string: string, replacement: string): string {\n\t\tswitch (this.#ORIGIN) {\n\t\t\tcase 'timeZone':\n\t\t\tcase 'toUTC':\n\t\t\tcase 'utc':\n\t\t\t\treturn string.replace(\n\t\t\t\t\tthis.toISOString().replace(\n\t\t\t\t\t\t/\\.\\d+(Z|[+-]\\d{2}:\\d{2})?$/,\n\t\t\t\t\t\t'',\n\t\t\t\t\t),\n\t\t\t\t\treplacement,\n\t\t\t\t);\n\t\t\tdefault:\n\t\t\t\treturn string.replace(\n\t\t\t\t\tthis.toLocalISOString().replace(\n\t\t\t\t\t\t/\\.\\d+(Z|[+-]\\d{2}:\\d{2})?$/,\n\t\t\t\t\t\t'',\n\t\t\t\t\t),\n\t\t\t\t\treplacement,\n\t\t\t\t);\n\t\t}\n\t}\n\n\t[Symbol.search](string: string): number {\n\t\tswitch (this.#ORIGIN) {\n\t\t\tcase 'timeZone':\n\t\t\tcase 'toUTC':\n\t\t\tcase 'utc':\n\t\t\t\treturn string.indexOf(\n\t\t\t\t\tthis.toISOString().replace(\n\t\t\t\t\t\t/\\.\\d+(Z|[+-]\\d{2}:\\d{2})?$/,\n\t\t\t\t\t\t'',\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\tdefault:\n\t\t\t\treturn string.indexOf(\n\t\t\t\t\tthis.toLocalISOString().replace(\n\t\t\t\t\t\t/\\.\\d+(Z|[+-]\\d{2}:\\d{2})?$/,\n\t\t\t\t\t\t'',\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t}\n\t}\n\n\t[Symbol.split](string: string): string[] {\n\t\tswitch (this.#ORIGIN) {\n\t\t\tcase 'timeZone':\n\t\t\tcase 'toUTC':\n\t\t\tcase 'utc':\n\t\t\t\treturn string.split(\n\t\t\t\t\tthis.toISOString().replace(\n\t\t\t\t\t\t/\\.\\d+(Z|[+-]\\d{2}:\\d{2})?$/,\n\t\t\t\t\t\t'',\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\tdefault:\n\t\t\t\treturn string.split(\n\t\t\t\t\tthis.toLocalISOString().replace(\n\t\t\t\t\t\t/\\.\\d+(Z|[+-]\\d{2}:\\d{2})?$/,\n\t\t\t\t\t\t'',\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t}\n\t}\n\n\tget [Symbol.toStringTag](): string {\n\t\tswitch (this.#ORIGIN) {\n\t\t\tcase 'timeZone':\n\t\t\t\treturn this.toISOString().replace('Z', this.#offset.slice(3));\n\t\t\tcase 'toUTC':\n\t\t\tcase 'utc':\n\t\t\t\treturn this.#toLocalISOString().replace(\n\t\t\t\t\tthis.getUTCOffset(),\n\t\t\t\t\t'Z',\n\t\t\t\t);\n\t\t\tdefault:\n\t\t\t\treturn this.#toLocalISOString();\n\t\t}\n\t}\n\n\t/**\n\t * @private Method to create native `Date` instance from date-like data types.\n\t * @param value The value to convert into `Date`.\n\t * @returns Instance of native Date object.\n\t */\n\t#toNewDate(value?: ChronosInput): Date {\n\t\tconst date =\n\t\t\tvalue instanceof Chronos ?\n\t\t\t\tvalue.toDate()\n\t\t\t:\tnew Date(value ?? Date.now());\n\n\t\t// Check if the date is invalid\n\t\tif (isNaN(date.getTime())) {\n\t\t\tthrow new Error('Provided date is invalid!');\n\t\t}\n\n\t\treturn date;\n\t}\n\n\t/**\n\t * @private Method to tag origin of the `Chronos` instance.\n\t *\n\t * @param origin Origin of the instance, the method name from where it was created.\n\t * @param offset Optional UTC offset in `UTC+12:00` format.\n\t * @returns The `Chronos` instance with the specified origin.\n\t */\n\t#withOrigin(origin: ChronosMethods, offset?: UTCOffSet): Chronos {\n\t\tconst instance = new Chronos(this.#date);\n\t\tinstance.#ORIGIN = origin;\n\t\tinstance.origin = origin;\n\t\tif (offset) instance.#offset = offset;\n\t\treturn instance;\n\t}\n\n\t/**\n\t * @private Formats the current `Chronos` date using the specified template.\n\t *\n\t * @param format - The desired date format.\n\t * @param useUTC - Whether to use UTC or local time.\n\t * @returns Formatted date string.\n\t */\n\t#format(format: string, useUTC = false): string {\n\t\tconst year =\n\t\t\tuseUTC ? this.#date.getUTCFullYear() : this.#date.getFullYear();\n\t\tconst month = useUTC ? this.#date.getUTCMonth() : this.#date.getMonth();\n\t\tconst day = useUTC ? this.#date.getUTCDay() : this.#date.getDay();\n\t\tconst date = useUTC ? this.#date.getUTCDate() : this.#date.getDate();\n\t\tconst hours = useUTC ? this.#date.getUTCHours() : this.#date.getHours();\n\t\tconst minutes =\n\t\t\tuseUTC ? this.#date.getUTCMinutes() : this.#date.getMinutes();\n\t\tconst seconds =\n\t\t\tuseUTC ? this.#date.getUTCSeconds() : this.#date.getSeconds();\n\t\tconst milliseconds =\n\t\t\tuseUTC ?\n\t\t\t\tthis.#date.getUTCMilliseconds()\n\t\t\t:\tthis.#date.getMilliseconds();\n\n\t\tconst dateComponents: Record<ChronosFormat, string> = {\n\t\t\tYYYY: String(year),\n\t\t\tYY: String(year).slice(-2),\n\t\t\tyyyy: String(year),\n\t\t\tyy: String(year).slice(-2),\n\t\t\tM: String(month + 1),\n\t\t\tMM: String(month + 1).padStart(2, '0'),\n\t\t\tmmm: MONTHS[month].slice(0, 3),\n\t\t\tmmmm: MONTHS[month],\n\t\t\td: DAYS[day].slice(0, 2),\n\t\t\tdd: DAYS[day].slice(0, 3),\n\t\t\tddd: DAYS[day],\n\t\t\tD: String(date),\n\t\t\tDD: String(date).padStart(2, '0'),\n\t\t\tDo: getOrdinal(date),\n\t\t\tH: String(hours),\n\t\t\tHH: String(hours).padStart(2, '0'),\n\t\t\th: String(hours % 12 || 12),\n\t\t\thh: String(hours % 12 || 12).padStart(2, '0'),\n\t\t\tm: String(minutes),\n\t\t\tmm: String(minutes).padStart(2, '0'),\n\t\t\ts: String(seconds),\n\t\t\tss: String(seconds).padStart(2, '0'),\n\t\t\tms: String(milliseconds),\n\t\t\tmss: String(milliseconds).padStart(3, '0'),\n\t\t\ta: hours < 12 ? 'am' : 'pm',\n\t\t\tA: hours < 12 ? 'AM' : 'PM',\n\t\t};\n\n\t\tlet result = '';\n\t\tlet i = 0;\n\n\t\twhile (i < format?.length) {\n\t\t\tlet matched = false;\n\n\t\t\tfor (const token of sortedFormats) {\n\t\t\t\tconst ahead = format?.slice(i, i + token?.length);\n\t\t\t\tconst prev = i === 0 ? '' : format[i - 1];\n\t\t\t\tconst next = format[i + token?.length] ?? '';\n\n\t\t\t\t// Check non-alphanumeric boundaries\n\t\t\t\tconst prevOk = i === 0 || /[^a-zA-Z0-9]/.test(prev);\n\t\t\t\tconst nextOk =\n\t\t\t\t\ti + token?.length >= format?.length ||\n\t\t\t\t\t/[^a-zA-Z0-9]/.test(next);\n\n\t\t\t\tif (ahead === token && prevOk && nextOk) {\n\t\t\t\t\tresult += dateComponents[token];\n\t\t\t\t\ti += token?.length;\n\t\t\t\t\tmatched = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!matched) {\n\t\t\t\tresult += format[i];\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/** @private Returns ISO string with local time zone offset */\n\t#toLocalISOString(): string {\n\t\tconst pad = (n: number, p = 2) => String(n).padStart(p, '0');\n\n\t\treturn `${this.year}-${pad(this.month + 1)}-${pad(this.date)}T${pad(this.hour)}:${pad(this.minute)}:${pad(this.second)}.${pad(this.millisecond, 3)}${this.getUTCOffset()}`;\n\t}\n\n\t/**\n\t * @private Normalizes duration values based on sign and `absolute` flag.\n\t * @param result The raw time breakdown to normalize.\n\t * @param absolute If true, ensures all values are positive.\n\t * @param isFuture Whether the duration was forward (true) or backward (false).\n\t * @returns The normalized duration object.\n\t */\n\t#normalizeDuration(\n\t\tresult: TimeDuration,\n\t\tabsolute: boolean,\n\t\tisFuture: boolean,\n\t): TimeDuration {\n\t\tconst entries = Object.entries(result) as [\n\t\t\tkeyof TimeDuration,\n\t\t\tnumber,\n\t\t][];\n\n\t\tif (!absolute && !isFuture) {\n\t\t\tfor (const [key, value] of entries) {\n\t\t\t\tif (value !== 0) {\n\t\t\t\t\tresult[key] = value * -1;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (absolute) {\n\t\t\tfor (const [key, value] of entries) {\n\t\t\t\tresult[key] = Math.abs(value);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/** Gets the full year of the date. */\n\tget year(): number {\n\t\treturn this.#date.getFullYear();\n\t}\n\n\t/** Gets the month (0-11) of the date. */\n\tget month(): number {\n\t\treturn this.#date.getMonth();\n\t}\n\n\t/** Gets the day of the month (1-31). */\n\tget date(): number {\n\t\treturn this.#date.getDate();\n\t}\n\n\t/** Gets the day of the week (0-6, where 0 is Sunday). */\n\tget weekDay(): number {\n\t\treturn this.#date.getDay();\n\t}\n\n\t/** Gets the hour (0-23) of the date. */\n\tget hour(): number {\n\t\treturn this.#date.getHours();\n\t}\n\n\t/** Gets the minute (0-59) of the date. */\n\tget minute(): number {\n\t\treturn this.#date.getMinutes();\n\t}\n\n\t/** Gets the second (0-59) of the date. */\n\tget second(): number {\n\t\treturn this.#date.getSeconds();\n\t}\n\n\t/** Gets the millisecond (0-999) of the date. */\n\tget millisecond(): number {\n\t\treturn this.#date.getMilliseconds();\n\t}\n\n\t/** Gets ISO weekday: 1 = Monday, 7 = Sunday */\n\tget isoWeekday(): number {\n\t\tconst day = this.weekDay;\n\n\t\treturn day === 0 ? 7 : day;\n\t}\n\n\t/** Gets ISO month (1–12 instead of 0–11) */\n\tget isoMonth(): number {\n\t\treturn this.month + 1;\n\t}\n\n\t/** Returns the Unix timestamp (seconds since the Unix epoch: January 1, 1970, UTC). */\n\tget unix(): number {\n\t\treturn Math.floor(this.#date.getTime() / 1000);\n\t}\n\n\t/** Gets the time value in milliseconds since midnight, January 1, 1970 UTC. */\n\tget timestamp(): number {\n\t\treturn this.#date.getTime();\n\t}\n\n\t/** * Gets the last date (number) of the current month `(28, 29, 30 or 31)`. */\n\tget lastDateOfMonth(): 28 | 29 | 30 | 31 {\n\t\treturn this.lastDayOfMonth().#date.getDate() as 28 | 29 | 30 | 31;\n\t}\n\n\t/** @instance Returns a debug-friendly string for `console.log` or `util.inspect`. */\n\tinspect(): string {\n\t\treturn `[Chronos ${this.toLocalISOString()}]`;\n\t}\n\n\t/** @instance Enables JSON.stringify and logging in the console (in Browser environment) to show readable output. */\n\ttoJSON(): string {\n\t\treturn this.toLocalISOString();\n\t}\n\n\t/** @instance Enables arithmetic and comparison operations (e.g., +new Chronos()). */\n\tvalueOf(): number {\n\t\treturn this.getTimeStamp();\n\t}\n\n\t/** @instance Clones and returns a new Chronos instance with the same date. */\n\tclone(): Chronos {\n\t\treturn new Chronos(this.#date).#withOrigin(\n\t\t\tthis.#ORIGIN as ChronosMethods,\n\t\t);\n\t}\n\n\t/** @instance Gets the native `Date` instance (read-only). */\n\ttoDate(): Date {\n\t\tswitch (this.#ORIGIN) {\n\t\t\tcase 'toUTC':\n\t\t\tcase 'utc': {\n\t\t\t\tconst mins = this.getUTCOffsetMinutes();\n\n\t\t\t\tconst date = this.addMinutes(mins);\n\n\t\t\t\treturn date.toDate();\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn new Date(this.#date);\n\t\t}\n\t}\n\n\t/** @instance Returns a string representation of a date. The format of the string depends on the locale. */\n\ttoString(): string {\n\t\tswitch (this.#ORIGIN) {\n\t\t\tcase 'timeZone': {\n\t\t\t\tconst gmt = this.#offset.replace('UTC', 'GMT').replace(':', '');\n\t\t\t\tconst label = TIME_ZONE_LABELS[this.#offset] ?? this.#offset;\n\n\t\t\t\treturn this.#date\n\t\t\t\t\t.toString()\n\t\t\t\t\t.replace(/GMT[+-]\\d{4} \\([^)]+\\)/, `${gmt} (${label})`);\n\t\t\t}\n\t\t\tcase 'toUTC':\n\t\t\tcase 'utc': {\n\t\t\t\tconst mins = this.getUTCOffsetMinutes();\n\n\t\t\t\tconst date = this.addMinutes(mins);\n\n\t\t\t\treturn date.toString();\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn this.#date.toString();\n\t\t}\n\t}\n\n\t/** @instance Returns ISO string with local time zone offset */\n\ttoLocalISOString(): string {\n\t\tswitch (this.#ORIGIN) {\n\t\t\tcase 'timeZone':\n\t\t\tcase 'toUTC':\n\t\t\tcase 'utc': {\n\t\t\t\tconst previousOffset = this.getTimeZoneOffsetMinutes();\n\t\t\t\tconst currentOffset = this.getUTCOffsetMinutes();\n\n\t\t\t\tconst date = this.addMinutes(-previousOffset - currentOffset);\n\n\t\t\t\treturn date.#toLocalISOString();\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn this.#toLocalISOString();\n\t\t}\n\t}\n\n\t/** @instance Returns a date as a string value in ISO format. */\n\ttoISOString(): string {\n\t\tswitch (this.#ORIGIN) {\n\t\t\tcase 'timeZone':\n\t\t\t\treturn this.#toLocalISOString().replace(\n\t\t\t\t\tthis.getUTCOffset(),\n\t\t\t\t\tthis.#offset.slice(3),\n\t\t\t\t);\n\t\t\tcase 'toUTC':\n\t\t\tcase 'utc':\n\t\t\t\treturn this.#toLocalISOString().replace(\n\t\t\t\t\tthis.getUTCOffset(),\n\t\t\t\t\t'Z',\n\t\t\t\t);\n\t\t\tdefault:\n\t\t\t\treturn this.#date.toISOString();\n\t\t}\n\t}\n\n\t/**\n\t * @instance Wrapper over native `toLocaleString`\n\t * @description Converts a date and time to a string by using the current or specified locale.\n\t *\n\t * @param locales A locale string, array of locale strings, Intl.Locale object, or array of Intl.Locale objects that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.\n\t * @param options An object that contains one or more properties that specify comparison options.\n\t */\n\ttoLocaleString(\n\t\tlocale?: LocaleCode | Intl.Locale | (LocaleCode | Intl.Locale)[],\n\t\toptions?: Intl.DateTimeFormatOptions,\n\t): string {\n\t\treturn this.#date.toLocaleString(locale, options);\n\t}\n\n\t/** @instance Returns the time value in milliseconds since midnight, January 1, 1970 UTC. */\n\tgetTimeStamp(): number {\n\t\treturn this.#date.getTime();\n\t}\n\n\t/**\n\t * @instance Formats the date into a custom string format (local time).\n\t *\n\t * @param format - The desired format (Default format is `dd, mmm DD, YYYY HH:mm:ss` = `Sun, Apr 06, 2025 16:11:55`).\n\t * @param useUTC - Optional `useUTC` to get the formatted time using UTC Offset, defaults to `false`. Equivalent to `formatUTC()` method if set to `true`.\n\t * @returns Formatted date string in desired format (in local time unless `useUTC` passed as `true`).\n\t */\n\tformat(format?: string, useUTC = false): string {\n\t\treturn this.#format(format ?? 'dd, mmm DD, YYYY HH:mm:ss', useUTC);\n\t}\n\n\t/**\n\t * @instance Formats the date into a predefined strict string format using local time or UTC.\n\t *\n\t * @remarks Offers over 21,000 predefined formats with full IntelliSense support.\n\t *\n\t * @param format - The desired format string. Defaults to `'dd, mmm DD, YYYY HH:mm:ss'`\n\t * (e.g., `'Sun, Apr 06, 2025 16:11:55'`).\n\t * @param useUTC - If `true`, formats the date in UTC (equivalent to `formatUTC()`);\n\t * defaults to `false` (local time).\n\t * @returns A formatted date string in the specified format\n\t */\n\tformatStrict(format?: StrictFormat, useUTC = false): string {\n\t\treturn this.#format(format ?? 'dd, mmm DD, YYYY HH:mm:ss', useUTC);\n\t}\n\n\t/**\n\t * @instance Formats the date into a custom string format (UTC time).\n\t *\n\t * @param format - The desired format (Default format is `dd, mmm DD, YYYY HH:mm:ss:mss` = `Sun, Apr 06, 2025 16:11:55:379`).\n\t * @returns Formatted date string in desired format (UTC time).\n\t */\n\tformatUTC(format: string = 'dd, mmm DD, YYYY HH:mm:ss:mss'): string {\n\t\tswitch (this.#offset) {\n\t\t\tcase 'UTC+00:00':\n\t\t\t\treturn this.#format(format, false);\n\t\t\tdefault:\n\t\t\t\treturn this.#format(format, true);\n\t\t}\n\t}\n\n\t/**\n\t * @instance Adds seconds and returns a new immutable instance.\n\t * @param seconds - Number of seconds to add.\n\t * @returns A new `Chronos` instance with the updated date.\n\t */\n\taddSeconds(seconds: number): Chronos {\n\t\tconst newDate = new Date(this.#date);\n\t\tnewDate.setSeconds(newDate.getSeconds() + seconds);\n\t\treturn new Chronos(newDate).#withOrigin('addSeconds');\n\t}\n\n\t/**\n\t * @instance Adds minutes and returns a new immutable instance.\n\t * @param minutes - Number of minutes to add.\n\t * @returns A new `Chronos` instance with the updated date.\n\t */\n\taddMinutes(minutes: number): Chronos {\n\t\tconst newDate = new Date(this.#date);\n\t\tnewDate.setMinutes(newDate.getMinutes() + minutes);\n\t\treturn new Chronos(newDate).#withOrigin('addMinutes');\n\t}\n\n\t/**\n\t * @instance Adds hours and returns a new immutable instance.\n\t * @param hours - Number of hours to add.\n\t * @returns A new `Chronos` instance with the updated date.\n\t */\n\taddHours(hours: number): Chronos {\n\t\tconst newDate = new Date(this.#date);\n\t\tnewDate.setHours(newDate.getHours() + hours);\n\t\treturn new Chronos(newDate).#withOrigin('addHours');\n\t}\n\n\t/**\n\t * @instance Adds days and returns a new immutable instance.\n\t * @param days - Number of days to add.\n\t * @returns A new `Chronos` instance with the updated date.\n\t */\n\taddDays(days: number): Chronos {\n\t\tconst newDate = new Date(this.#date);\n\t\tnewDate.setDate(newDate.getDate() + days);\n\t\treturn new Chronos(newDate).#withOrigin('addDays');\n\t}\n\n\t/**\n\t * @instance Adds weeks and returns a new immutable instance.\n\t * @param weeks - Number of weeks to add.\n\t * @returns A new `Chronos` instance with the updated date.\n\t */\n\taddWeeks(weeks: number): Chronos {\n\t\tconst newDate = new Date(this.#date);\n\t\tnewDate.setDate(newDate.getDate() + weeks * 7);\n\t\treturn new Chronos(newDate).#withOrigin('addWeeks');\n\t}\n\n\t/**\n\t * @instance Adds months and returns a new immutable instance.\n\t * @param months - Number of months to add.\n\t * @returns A new `Chronos` instance with the updated date.\n\t */\n\taddMonths(months: number): Chronos {\n\t\tconst newDate = new Date(this.#date);\n\t\tnewDate.setMonth(newDate.getMonth() + months);\n\t\treturn new Chronos(newDate).#withOrigin('addMonths');\n\t}\n\n\t/**\n\t * @instance Adds years and returns a new immutable instance.\n\t * @param years - Number of years to add.\n\t * @returns A new `Chronos` instance with the updated date.\n\t */\n\taddYears(years: number): Chronos {\n\t\tconst newDate = new Date(this.#date);\n\t\tnewDate.setFullYear(newDate.getFullYear() + years);\n\t\treturn new Chronos(newDate).#withOrigin('addYears');\n\t}\n\n\t/**\n\t * @instance Create a new instance of `Chronos` in the specified timezone.\n\t *\n\t * @param zone - Standard timezone abbreviation (e.g., 'IST', 'UTC', 'EST') or UTC Offset in `UTC-01:30` format.\n\t * @returns A new instance of `Chronos` with time in the given timezone. Invalid input sets time-zone to `UTC`.\n\t */\n\ttimeZone(zone: TimeZone | UTCOffSet): Chronos {\n\t\tlet targetOffset: number;\n\t\tlet stringOffset: UTCOffSet;\n\n\t\tif (isValidUTCOffSet(zone)) {\n\t\t\ttargetOffset = extractMinutesFromUTC(zone);\n\t\t\tstringOffset = zone;\n\t\t} else {\n\t\t\ttargetOffset = TIME_ZONES[zone] ?? TIME_ZONES['UTC'];\n\t\t\tstringOffset = formatUTCOffset(targetOffset);\n\t\t}\n\n\t\tconst previousOffset = this.getTimeZoneOffsetMinutes();\n\t\tconst relativeOffset = targetOffset - previousOffset;\n\n\t\tconst adjustedTime = new Date(\n\t\t\tthis.#date.getTime() + relativeOffset * 60 * 1000,\n\t\t);\n\n\t\treturn new Chronos(adjustedTime).#withOrigin('timeZone', stringOffset);\n\t}\n\n\t/**\n\t * @instance Checks if the year is a leap year.\n\t * - A year is a leap year if it is divisible by 4, but not divisible by 100, unless it is also divisible by 400.\n\t * - For example, 2000 and 2400 are leap years, but 1900 and 2100 are not.\n\t * @returns `true` if the year is a leap year, `false` otherwise.\n\t */\n\tisLeapYear(): boolean {\n\t\tconst year = this.#date.getFullYear();\n\n\t\treturn isLeapYear(year);\n\t}\n\n\t/** @instance Checks if the current date is today. */\n\tisToday(): boolean {\n\t\treturn this.getRelativeDay() === 0;\n\t}\n\n\t/** @instance Checks if the current date is tomorrow. */\n\tisTomorrow(): boolean {\n\t\treturn this.getRelativeDay() === 1;\n\t}\n\n\t/** @instance Checks if the current date is yesterday. */\n\tisYesterday(): boolean {\n\t\treturn this.getRelativeDay() === -1;\n\t}\n\n\t/** @instance Checks if another date is exactly equal to this one */\n\tisEqual(other: ChronosInput): boolean {\n\t\tconst time = other instanceof Chronos ? other : new Chronos(other);\n\n\t\treturn this.timestamp === time.timestamp;\n\t}\n\n\t/** @instance Checks if another date is exactly equal to or before this one */\n\tisEqualOrBefore(other: ChronosInput): boolean {\n\t\tconst time = other instanceof Chronos ? other : new Chronos(other);\n\n\t\treturn this.timestamp <= time.timestamp;\n\t}\n\n\t/** @instance Checks if another date is exactly equal to or after this one */\n\tisEqualOrAfter(other: ChronosInput): boolean {\n\t\tconst time = other instanceof Chronos ? other : new Chronos(other);\n\n\t\treturn this.timestamp >= time.timestamp;\n\t}\n\n\t/**\n\t * @instance Checks if another date is the same as this one in a specific unit.\n\t * @param other The other date to compare.\n\t * @param unit The unit to compare.\n\t * @param weekStartsOn Optional: Day the week starts on (0 = Sunday, 1 = Monday). Applicable if week day is required. Default is `0`.\n\t */\n\tisSame(\n\t\tother: ChronosInput,\n\t\tunit: TimeUnit,\n\t\tweekStartsOn: number = 0,\n\t): boolean {\n\t\tconst time = other instanceof Chronos ? other : new Chronos(other);\n\n\t\treturn (\n\t\t\tthis.startOf(unit, weekStartsOn).toDate().getTime() ===\n\t\t\ttime.startOf(unit, weekStartsOn).toDate().getTime()\n\t\t);\n\t}\n\n\t/**\n\t * @instance Checks if this date is before another date in a specific unit.\n\t * @param other The other date to compare.\n\t * @param unit The unit to compare.\n\t * @param weekStartsOn Optional: Day the week starts on (0 = Sunday, 1 = Monday). Applicable if week day is required. Default is `0`.\n\t */\n\tisBefore(\n\t\tother: ChronosInput,\n\t\tunit: TimeUnit,\n\t\tweekStartsOn: number = 0,\n\t): boolean {\n\t\tconst time = other instanceof Chronos ? other : new Chronos(other);\n\n\t\treturn (\n\t\t\tthis.startOf(unit, weekStartsOn).toDate().getTime() <\n\t\t\ttime.startOf(unit, weekStartsOn).toDate().getTime()\n\t\t);\n\t}\n\n\t/**\n\t * @instance Checks if this date is after another date in a specific unit.\n\t * @param other The other date to compare.\n\t * @param unit The unit to compare.\n\t * @param weekStartsOn Optional: Day the week starts on (0 = Sunday, 1 = Monday). Applicable if week day is required. Default is `0`.\n\t */\n\tisAfter(\n\t\tother: ChronosInput,\n\t\tunit: TimeUnit,\n\t\tweekStartsOn: number = 0,\n\t): boolean {\n\t\tconst time = other instanceof Chronos ? other : new Chronos(other);\n\n\t\treturn (\n\t\t\tthis.startOf(unit, weekStartsOn).toDate().getTime() >\n\t\t\ttime.startOf(unit, weekStartsOn).toDate().getTime()\n\t\t);\n\t}\n\n\t/**\n\t * @instance Checks if this date is the same or before another date in a specific unit.\n\t * @param other The other date to compare.\n\t * @param unit The unit to compare.\n\t * @param weekStartsOn Optional: Day the week starts on (0 = Sunday, 1 = Monday). Applicable if week day is required. Default is `0`.\n\t */\n\tisSameOrBefore(\n\t\tother: ChronosInput,\n\t\tunit: TimeUnit,\n\t\tweekStartsOn: number = 0,\n\t): boolean {\n\t\treturn (\n\t\t\tthis.isSame(other, unit, weekStartsOn) ||\n\t\t\tthis.isBefore(other, unit, weekStartsOn)\n\t\t);\n\t}\n\n\t/**\n\t * @instance Checks if this date is the same or after another date in a specific unit.\n\t * @param other The other date to compare.\n\t * @param unit The unit to compare.\n\t * @param weekStartsOn Optional: Day the week starts on (0 = Sunday, 1 = Monday). Applicable if week day is required. Default is `0`.\n\t */\n\tisSameOrAfter(\n\t\tother: ChronosInput,\n\t\tunit: TimeUnit,\n\t\tweekStartsOn: number = 0,\n\t): boolean {\n\t\treturn (\n\t\t\tthis.isSame(other, unit, weekStartsOn) ||\n\t\t\tthis.isAfter(other, unit, weekStartsOn)\n\t\t);\n\t}\n\n\t/**\n\t * @instance Checks if the current date is between the given start and end dates.\n\t *\n\t * @param start - The start of the range.\n\t * @param end - The end of the range.\n\t * @param inclusive - Specifies whether the comparison is inclusive or exclusive:\n\t * - `'[]'`: inclusive of both start and end (≥ start and ≤ end)\n\t * - `'[)'`: inclusive of start, exclusive of end (≥ start and < end)\n\t * - `'(]'`: exclusive of start, inclusive of end (> start and ≤ end)\n\t * - `'()'`: exclusive of both start and end (> start and < end)\n\t *\n\t * @returns `true` if the current date is within the specified range based on the `inclusive` mode.\n\t */\n\tisBetween(\n\t\tstart: ChronosInput,\n\t\tend: ChronosInput,\n\t\tinclusive: '[]' | '[)' | '(]' | '()' = '()',\n\t): boolean {\n\t\tconst s = new Chronos(start).valueOf();\n\t\tconst e = new Chronos(end).valueOf();\n\t\tconst t = this.valueOf();\n\n\t\tswitch (inclusive) {\n\t\t\tcase '[]':\n\t\t\t\treturn t >= s && t <= e;\n\t\t\tcase '[)':\n\t\t\t\treturn t >= s && t < e;\n\t\t\tcase '(]':\n\t\t\t\treturn t > s && t <= e;\n\t\t\tcase '()':\n\t\t\t\treturn t > s && t < e;\n\t\t}\n\t}\n\n\t/**\n\t * @instance Checks if the current date falls on a weekend.\n\t *\n\t * @param weekStartsOn Optional day the week starts on (0–6). Default is `0` (Sunday).\n\t * @param weekendLength Optional length of the weekend (1 or 2). Default is `2`.\n\t * @returns Whether the date is a weekend.\n\t *\n\t * @description\n\t * Weekend is determined based on `weekStartsOn` and `weekendLength`.\n\t *\n\t * - `weekStartsOn` is a 0-based index (0 = Sunday, 1 = Monday, ..., 6 = Saturday).\n\t * - `weekendLength` defines how many days are considered weekend (1 or 2). Default is 2.\n\t * If 1, only the last day of the week is treated as weekend.\n\t * If 2, the last two days are treated as weekend.\n\t */\n\tisWeekend(weekStartsOn: number = 0, weekendLength: 1 | 2 = 2): boolean {\n\t\tconst day = this.#date.getDay();\n\t\tconst lastDayOfWeek = (weekStartsOn + 6) % 7;\n\t\tconst secondLastDay = (weekStartsOn + 5) % 7;\n\n\t\tif (weekendLength === 1) {\n\t\t\treturn day === lastDayOfWeek;\n\t\t}\n\n\t\treturn day === lastDayOfWeek || day === secondLastDay;\n\t}\n\n\t/**\n\t * @instance Checks if the current date is a workday (non-weekend day).\n\t *\n\t * @param weekStartsOn Optional day the week starts on (0–6). Default is `0` (Sunday).\n\t * @param weekendLength Optional length of the weekend (1 or 2). Default is `2`.\n\t * @returns Whether the date is a workday.\n\t *\n\t * @description\n\t * Weekends are determined by `weekStartsOn` and `weekendLength`.\n\t *\n\t * - `weekStartsOn` is a 0-based index (0 = Sunday, 1 = Monday, ..., 6 = Saturday).\n\t * - `weekendLength` defines how many days are considered weekend (1 or 2). Default is 2.\n\t */\n\tisWorkday(weekStartsOn: number = 0, weekendLength: 1 | 2 = 2): boolean {\n\t\treturn !this.isWeekend(weekStartsOn, weekendLength);\n\t}\n\n\t/**\n\t * @instance Checks if the current date and time fall within business hours.\n\t *\n\t * @param businessStartHour Optional starting hour of business time (0–23). Defaults to `9` (9 AM).\n\t * @param businessEndHour Optional ending hour of business time (0–23). Defaults to `17` (5 PM).\n\t * @param weekStartsOn Optional day the week starts on (0–6). Default is `0` (Sunday).\n\t * @param weekendLength Optional weekend length (1 or 2). Default is `2`.\n\t *\n\t * @returns Whether the current time is within business hours.\n\t *\n\t * @remarks\n\t * * Business hours are typically 9 AM to 5 PM on weekdays.\n\t * * Supports standard and overnight business hours. Overnight means `end < start`.\n\t * * Example: `businessStartHour = 22`, `businessEndHour = 6` will cover 10 PM to 6 AM next day.\n\t *\n\t * * *Weekends are determined by `weekStartsOn` and `weekendLength` using the `isWeekend()` method.*\n\t *\n\t * - Business hours are `[businessStartHour, businessEndHour)`.\n\t * - If `weekendLength` is `1`, only the last day of the week is treated as weekend.\n\t * - If `weekendLength` is `2`, the last two days are treated as weekend.\n\t */\n\tisBusinessHour(\n\t\tbusinessStartHour: number = 9,\n\t\tbusinessEndHour: number = 17,\n\t\tweekStartsOn: number = 0,\n\t\tweekendLength: 1 | 2 = 2,\n\t): boolean {\n\t\tif (this.isWeekend(weekStartsOn, weekendLength)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst hour = this.#date.getHours();\n\n\t\tif (businessStartHour === businessEndHour) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (businessStartHour < businessEndHour) {\n\t\t\t// Normal range, e.g. 9 → 17\n\t\t\treturn hour >= businessStartHour && hour < businessEndHour;\n\t\t} else {\n\t\t\t// Overnight shift, e.g. 22 → 6\n\t\t\treturn hour >= businessStartHour || hour < businessEndHour;\n\t\t}\n\t}\n\n\t/**\n\t * @instance Checks if the current date is a palindrome in either padded or non-padded format.\n\t *\n\t * @remarks\n\t * A palindrome date reads the same forward and backward, excluding delimiters.\n\t * This method checks both zero-padded (`MM-DD`) and non-padded (`M-D`) formats for flexibility.\n\t *\n\t * Examples of palindromes:\n\t * - `'2020-02-02'` → `'20200202'` ✅\n\t * - `'2112-11-12'` → `'21121112'` ❌\n\t * - `'2011-01-11'` (from `'YY-M-D'`) → `'11111'` ✅\n\t * - `'2011-01-11'` (from `'YYYY-M-D'`) → `'11111'` ❌\n\t *\n\t * @param shortYear - If `true`, uses `'YY-MM-DD'` and `'YY-M-D'` formats.\n\t * If `false`, uses `'YYYY-MM-DD'` and `'YYYY-M-D'` formats.\n\t * Defaults to `false`.\n\t *\n\t * @returns `true` if either padded or non-padded formatted date is a palindrome, otherwise `false`.\n\t *\n\t * @example\n\t * new Chronos('2020-02-02').isPalindromeDate(); // true\n\t * new Chronos('2112-11-12').isPalindromeDate(); // false\n\t * new Chronos('2011-1-11').isPalindromeDate(); // false (from '2011111')\n\t * new Chronos('2011-1-11').isPalindromeDate(true); // true (from '11111')\n\t * new Chronos('2024-04-11').isPalindromeDate(); // false\n\t */\n\tisPalindromeDate(shortYear = false): boolean {\n\t\tconst padded = this.formatStrict(shortYear ? 'YY-MM-DD' : 'YYYY-MM-DD');\n\t\tconst normal = this.formatStrict(shortYear ? 'YY-M-D' : 'YYYY-M-D');\n\t\treturn isPalindrome(padded) || isPalindrome(normal);\n\t}\n\n\t/**\n\t * @instance Checks if the date is within daylight saving time (DST).\n\t * @returns Whether the date is in DST.\n\t */\n\tisDST(): boolean {\n\t\tconst year = this.#date.getFullYear();\n\n\t\tconst jan = new Date(year, 0, 1).getTimezoneOffset();\n\n\t\tconst jul = new Date(year, 6, 1).getTimezoneOffset();\n\n\t\treturn this.#date.getTimezoneOffset() < Math.max(jan, jul);\n\t}\n\n\t/** @instance Checks if current day is the first day of the current month. */\n\tisFirstDayOfMonth(): boolean {\n\t\treturn this.isSame(this.firstDayOfMonth(), 'day');\n\t}\n\n\t/** @instance Checks if current day is the last day of the current month. */\n\tisLastDayOfMonth(): boolean {\n\t\treturn this.isSame(this.lastDayOfMonth(), 'day');\n\t}\n\n\t/**\n\t * @instance Returns full time difference from now (or a specified time) down to a given level.\n\t *\n\t * @param level Determines the smallest unit to include in the output (e.g., 'minute' will show up to minutes, ignoring seconds). Defaults to `minute`.\n\t * @param withSuffixPrefix If `true`, adds `\"in\"` or `\"ago\"` depending on whether the time is in the future or past. Defaults to `true`.\n\t * @param time An optional time value to compare with (`string`, `number`, `Date`, or `Chronos` instance). Defaults to `now`.\n\t * @returns The difference as a human-readable string, e.g., `2 years 1 month 9 days 18 hours 56 minutes ago`.\n\t */\n\tfromNow(\n\t\tlevel: Exclude<TimeUnit, 'millisecond'> = 'minute',\n\t\twithSuffixPrefix: boolean = true,\n\t\ttime?: ChronosInput,\n\t): string {\n\t\tconst now = this.#toNewDate(time);\n\n\t\tconst target = this.#date;\n\n\t\tconst isFuture = target > now;\n\n\t\tconst from = isFuture ? now : target;\n\t\tconst to = isFuture ? target : now;\n\n\t\tlet years = to.getFullYear() - from.getFullYear();\n\t\tlet months = to.getMonth() - from.getMonth();\n\t\tlet days = to.getDate() - from.getDate();\n\t\tlet weeks = 0;\n\t\tlet hours = to.getHours() - from.getHours();\n\t\tlet minutes = to.getMinutes() - from.getMinutes();\n\t\tlet seconds = to.getSeconds() - from.getSeconds();\n\n\t\t// Adjust negative values\n\t\tif (seconds < 0) {\n\t\t\tseconds += 60;\n\t\t\tminutes--;\n\t\t}\n\n\t\tif (minutes < 0) {\n\t\t\tminutes += 60;\n\t\t\thours--;\n\t\t}\n\n\t\tif (hours < 0) {\n\t\t\thours += 24;\n\t\t\tdays--;\n\t\t}\n\n\t\tif (level === 'week' || level === 'day') {\n\t\t\tweeks = Math.floor(days / 7);\n\t\t\tdays = days % 7;\n\t\t}\n\n\t\tif (days < 0) {\n\t\t\tconst prevMonth = new Date(to.getFullYear(), to.getMonth(), 0);\n\n\t\t\tdays += prevMonth.getDate();\n\t\t\tmonths--;\n\t\t}\n\n\t\tif (months < 0) {\n\t\t\tmonths += 12;\n\t\t\tyears--;\n\t\t}\n\n\t\tconst unitOrder = [\n\t\t\t'year',\n\t\t\t'month',\n\t\t\t'week',\n\t\t\t'day',\n\t\t\t'hour',\n\t\t\t'minute',\n\t\t\t'second',\n\t\t] as const;\n\n\t\tconst lvlIdx = unitOrder.indexOf(level);\n\n\t\tconst parts: string[] = [];\n\n\t\tif (lvlIdx >= 0 && years > 0 && lvlIdx >= unitOrder.indexOf('year')) {\n\t\t\tparts?.push(formatUnitWithPlural(years, 'year'));\n\t\t}\n\t\tif (lvlIdx >= unitOrder.indexOf('month') && months > 0) {\n\t\t\tparts?.push(formatUnitWithPlural(months, 'month'));\n\t\t}\n\t\tif (lvlIdx >= unitOrder.indexOf('week') && weeks > 0) {\n\t\t\tparts?.push(formatUnitWithPlural(weeks, 'week'));\n\t\t}\n\t\tif (lvlIdx >= unitOrder.indexOf('day') && days > 0) {\n\t\t\tparts?.push(formatUnitWithPlural(days, 'day'));\n\t\t}\n\t\tif (lvlIdx >= unitOrder.indexOf('hour') && hours > 0) {\n\t\t\tparts?.push(formatUnitWithPlural(hours, 'hour'));\n\t\t}\n\t\tif (lvlIdx >= unitOrder.indexOf('minute') && minutes > 0) {\n\t\t\tparts?.push(formatUnitWithPlural(minutes, 'minute'));\n\t\t}\n\t\tif (\n\t\t\tlvlIdx >= unitOrder.indexOf('second') &&\n\t\t\t(seconds > 0 || parts?.length === 0)\n\t\t) {\n\t\t\tparts?.push(formatUnitWithPlural(seconds, 'second'));\n\t\t}\n\n\t\tlet prefix = '';\n\t\tlet suffix = '';\n\n\t\tif (withSuffixPrefix) {\n\t\t\tif (isFuture) {\n\t\t\t\tprefix = 'in ';\n\t\t\t} else {\n\t\t\t\tsuffix = ' ago';\n\t\t\t}\n\t\t}\n\n\t\treturn `${prefix}${parts?.join(' ')}${suffix}`;\n\t}\n\n\t/**\n\t * * Returns the part of day (`'midnight', 'lateNight', 'night', 'morning', 'afternoon', 'evening'`) based on the current hour.\n\t *\n\t * *Supports both normal and wraparound (overnight) ranges.*\n\t *\n\t * @param config - Optional custom hour ranges for each part of day.\n\t * Each range must be a tuple of strings as `[startHour, endHour]` in 24-hour format (e.g., `['06', '11']`).\n\t * Supports wraparound ranges like `['22', '04']` that cross midnight.\n\t *\n\t * **Default Ranges:**\n\t * - night: ['21', '23']\n\t * - midnight: ['00', '01']\n\t * - lateNight: ['02', '04']\n\t * - morning: ['05', '11']\n\t * - afternoon: ['12', '16']\n\t * - evening: ['17', '20']\n\t *\n\t * @returns The current part of the day as a string.\n\t *\n\t * @example\n\t * chronosInstance.getPartOfDay(); // e.g., 'morning'\n\t *\n\t * @example\n\t * // Example with custom ranges\n\t * chronosInstance.getPartOfDay({\n\t * night: ['22', '04'],\n\t * morning: ['05', '11'],\n\t * afternoon: ['12', '16'],\n\t * evening: ['17', '21'],\n\t * lateNight: ['01', '03'],\n\t * midnight: ['00', '00'],\n\t * });\n\t */\n\tgetPartOfDay(config?: Partial<DayPartConfig>): DayPart {\n\t\tconst hour = this.#date.getHours();\n\n\t\tconst ranges: DayPartConfig = {\n\t\t\t...DEFAULT_RANGES,\n\t\t\t...config,\n\t\t};\n\n\t\tfor (const [part, [start, end]] of Object.entries(ranges)) {\n\t\t\tconst from = Number(start);\n\t\t\tconst to = Number(end);\n\n\t\t\tif (from <= to) {\n\t\t\t\tif (hour >= from && hour <= to) {\n\t\t\t\t\treturn part as DayPart;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Wraparound logic (e.g., 20 to 04 means 20–23 OR 00–04)\n\t\t\t\tif (hour >= from || hour <= to) {\n\t\t\t\t\treturn part as DayPart;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn 'night';\n\t}\n\n\t/**\n\t * @instance Returns the number of full years between the input date and now.\n\t * @param time Optional time to compare with the `Chronos` date/time.\n\t * @returns The difference in number, negative is `Chronos` time is a past time else positive.\n\t */\n\tgetRelativeYear(time?: ChronosInput): number {\n\t\tconst now = this.#toNewDate(time);\n\n\t\tlet years = this.#date.getFullYear() - now.getFullYear();\n\n\t\tconst noYearMonthDay =\n\t\t\tnow.getMonth() < this.#date.getMonth() ||\n\t\t\t(now.getMonth() === this.#date.getMonth() &&\n\t\t\t\tnow.getDate() < this.#date.getDate());\n\n\t\tif (noYearMonthDay) {\n\t\t\tyears--;\n\t\t}\n\n\t\treturn years;\n\t}\n\n\t/**\n\t * @instance Returns the number of full months between the input date and now.\n\t * @param time Optional time to compare with the `Chronos` date/time.\n\t * @returns The difference in number, negative is `Chronos` time is a past time else positive.\n\t */\n\tgetRelativeMonth(time?: ChronosInput): number {\n\t\tconst now = this.#toNewDate(time);\n\n\t\tlet months =\n\t\t\t(this.#date.getFullYear() - now.getFullYear()) * 12 +\n\t\t\t(this.#date.getMonth() - now.getMonth());\n\n\t\tconst hasNotHadMonthDay = now.getDate() < this.#date.getDate();\n\n\t\tif (hasNotHadMonthDay) {\n\t\t\tmonths--;\n\t\t}\n\n\t\treturn months;\n\t}\n\n\t/**\n\t * @instance Determines if the given date is today, tomorrow, yesterday or any relative day.\n\t * @param date - The date to compare (Date object).\n\t * @param time Optional time to compare with the `Chronos` date/time.\n\t * @returns\n\t * - `-1` if the date is yesterday.\n\t * - `0` if the date is today.\n\t * - `1` if the date is tomorrow.\n\t * - Other positive or negative numbers for other relative days (e.g., `-2` for two days ago, `2` for two days ahead).\n\t */\n\tgetRelativeDay(time?: ChronosInput): number {\n\t\tconst today = this.#toNewDate(time);\n\t\t// Set the time of today to 00:00:00 for comparison purposes\n\t\ttoday.setHours(0, 0, 0, 0);\n\n\t\t// Normalize the input date to 00:00:00\n\t\tconst inputDate = this.#date;\n\t\tinputDate.setHours(0, 0, 0, 0);\n\n\t\tconst diffTime = inputDate.getTime() - today.getTime();\n\t\tconst diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24));\n\n\t\treturn diffDays;\n\t}\n\n\t/**\n\t * @instance Determines how many full weeks apart the input date is from the `Chronos` instance.\n\t * @param time Optional time to compare with the `Chronos` date/time.\n\t * @returns Difference in weeks; negative if past, positive if future.\n\t */\n\tgetRelativeWeek(time?: ChronosInput): number {\n\t\tconst relativeDays = this.getRelativeDay(time);\n\t\treturn Math.floor(relativeDays / 7);\n\t}\n\n\t/**\n\t * @instance Returns the number of full hours between the input date and now.\n\t * @param time Optional time to compare with the `Chronos` date/time.\n\t * @returns The difference in number, negative is `Chronos` time is a past time else positive.\n\t */\n\tgetRelativeHour(time?: ChronosInput): number {\n\t\tconst diff = this.#date.getTime() - this.#toNewDate(time).getTime();\n\t\treturn Math.floor(diff / (1000 * 60 * 60));\n\t}\n\n\t/**\n\t * @instance Returns the number of full minutes between the input date and now.\n\t * @param time Optional time to compare with the `Chronos` date/time.\n\t * @returns The difference in number, negative is `Chronos` time is a past time else positive.\n\t */\n\tgetRelativeMinute(time?: ChronosInput): number {\n\t\tconst diff = this.#date.getTime() - this.#toNewDate(time).getTime();\n\t\treturn Math.floor(diff / (1000 * 60));\n\t}\n\n\t/**\n\t * @instance Returns the number of full seconds between the input date and now.\n\t * @param time Optional time to compare with the `Chronos` date/time.\n\t * @returns The difference in number, negative is `Chronos` time is a past time else positive.\n\t */\n\tgetRelativeSecond(time?: ChronosInput): number {\n\t\tconst diff = this.#date.getTime() - this.#toNewDate(time).getTime();\n\t\treturn Math.floor(diff / 1000);\n\t}\n\n\t/**\n\t * @instance Returns the number of milliseconds between the input date and now.\n\t * @param time Optional time to compare with the `Chronos` date/time.\n\t * @returns The difference in number, negative is `Chronos` time is a past time else positive.\n\t */\n\tgetRelativeMilliSecond(time?: ChronosInput): number {\n\t\treturn this.#date.getTime() - this.#toNewDate(time).getTime();\n\t}\n\n\t/** @instance Returns a new Chronos instance set to the first day of the current month. */\n\tfirstDayOfMonth(): Chronos {\n\t\tconst year = this.#date.getFullYear();\n\t\tconst month = this.#date.getMonth();\n\t\tconst lastDate = new Date(year, month, 1);\n\t\treturn new Chronos(lastDate).#withOrigin('firstDayOfMonth');\n\t}\n\n\t/** @instance Returns a new Chronos instance set to the last day of the current month. */\n\tlastDayOfMonth(): Chronos {\n\t\tconst year = this.#date.getFullYear();\n\t\tconst month = this.#date.getMonth() + 1;\n\t\tconst lastDate = new Date(year, month, 0);\n\t\treturn new Chronos(lastDate).#withOrigin('lastDayOfMonth');\n\t}\n\n\t/**\n\t * @instance Compares the stored date with now, returning the difference in the specified unit.\n\t *\n\t * @param unit The time unit to compare by. Defaults to 'minute'.\n\t * @param time Optional time to compare with the `Chronos` date/time.\n\t * @returns The difference in number, negative is `Chronos` time is a past time else positive.\n\t */\n\tcompare(unit: TimeUnit = 'minute', time?: ChronosInput): number {\n\t\tswitch (unit) {\n\t\t\tcase 'year':\n\t\t\t\treturn this.getRelativeYear(time);\n\t\t\tcase 'month':\n\t\t\t\treturn this.getRelativeMonth(time);\n\t\t\tcase 'day':\n\t\t\t\treturn this.getRelativeDay(time);\n\t\t\tcase 'week':\n\t\t\t\treturn this.getRelativeWeek(time);\n\t\t\tcase 'hour':\n\t\t\t\treturn this.getRelativeHour(time);\n\t\t\tcase 'minute':\n\t\t\t\treturn this.getRelativeMinute(time);\n\t\t\tcase 'second':\n\t\t\t\treturn this.getRelativeSecond(time);\n\t\t\tcase 'millisecond':\n\t\t\t\treturn this.getRelativeMilliSecond(time);\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported time unit: ${unit}`);\n\t\t}\n\t}\n\n\t/**\n\t * @instance Returns a new Chronos instance at the start of a given unit.\n\t * @param unit The unit to reset (e.g., year, month, day).\n\t * @param weekStartsOn Optional: Day the week starts on (0 = Sunday, 1 = Monday). Applicable if week day is required. Default is `0`.\n\t */\n\tstartOf(unit: TimeUnit, weekStartsOn: number = 0): Chronos {\n\t\tconst d = new Date(this.#date);\n\n\t\tswitch (unit) {\n\t\t\tcase 'year':\n\t\t\t\td.setMonth(0, 1);\n\t\t\t\td.setHours(0, 0, 0, 0);\n\t\t\t\tbreak;\n\t\t\tcase 'month':\n\t\t\t\td.setDate(1);\n\t\t\t\td.setHours(0, 0, 0, 0);\n\t\t\t\tbreak;\n\t\t\tcase 'week': {\n\t\t\t\tconst day = d.getDay();\n\t\t\t\tconst diff = (day - weekStartsOn + 7) % 7;\n\t\t\t\td.setDate(d.getDate() - diff);\n\t\t\t\td.setHours(0, 0, 0, 0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'day':\n\t\t\t\td.setHours(0, 0, 0, 0);\n\t\t\t\tbreak;\n\t\t\tcase 'hour':\n\t\t\t\td.setMinutes(0, 0, 0);\n\t\t\t\tbreak;\n\t\t\tcase 'minute':\n\t\t\t\td.setSeconds(0, 0);\n\t\t\t\tbreak;\n\t\t\tcase 'second':\n\t\t\t\td.setMilliseconds(0);\n\t\t\t\tbreak;\n\t\t\tcase 'millisecond':\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn new Chronos(d).#withOrigin('startOf');\n\t}\n\n\t/**\n\t * @instance Returns a new Chronos instance at the end of a given unit.\n\t * @param unit The unit to adjust (e.g., year, month, day).\n\t * @param weekStartsOn Optional: Day the week starts on (0 = Sunday, 1 = Monday). Applicable if week day is required. Default is `0`.\n\t */\n\tendOf(unit: TimeUnit, weekStartsOn: number = 0): Chronos {\n\t\treturn this.startOf(unit, weekStartsOn)\n\t\t\t.add(1, unit)\n\t\t\t.add(-1, 'millisecond')\n\t\t\t.#withOrigin('endOf');\n\t}\n\n\t/**\n\t * @instance Returns a new Chronos instance with the specified unit added.\n\t * @param amount The amount to add (can be negative).\n\t * @param unit The time unit to add.\n\t */\n\tadd(amount: number, unit: TimeUnit): Chronos {\n\t\tconst d = new Date(this.#date);\n\n\t\tswitch (unit) {\n\t\t\tcase 'millisecond':\n\t\t\t\td.setMilliseconds(d.getMilliseconds() + amount);\n\t\t\t\tbreak;\n\t\t\tcase 'second':\n\t\t\t\td.setSeconds(d.getSeconds() + amount);\n\t\t\t\tbreak;\n\t\t\tcase 'minute':\n\t\t\t\td.setMinutes(d.getMinutes() + amount);\n\t\t\t\tbreak;\n\t\t\tcase 'hour':\n\t\t\t\td.setHours(d.getHours() + amount);\n\t\t\t\tbreak;\n\t\t\tcase 'day':\n\t\t\t\td.setDate(d.getDate() + amount);\n\t\t\t\tbreak;\n\t\t\tcase 'week':\n\t\t\t\td.setDate(d.getDate() + amount * 7);\n\t\t\t\tbreak;\n\t\t\tcase 'month':\n\t\t\t\td.setMonth(d.getMonth() + amount);\n\t\t\t\tbreak;\n\t\t\tcase 'year':\n\t\t\t\td.setFullYear(d.getFullYear() + amount);\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn new Chronos(d).#withOrigin('add');\n\t}\n\n\t/**\n\t * @instance Returns a new Chronos instance with the specified unit subtracted.\n\t * @param amount The amount to subtract (can be negative).\n\t * @param unit The time unit to add.\n\t */\n\tsubtract(amount: number, unit: TimeUnit): Chronos {\n\t\treturn this.add(-amount, unit).#withOrigin('subtract');\n\t}\n\n\t/**\n\t * @instance Gets the value of a specific time unit from the date.\n\t * @param unit The unit to retrieve.\n\t */\n\tget(unit: TimeUnit): number {\n\t\tswitch (unit) {\n\t\t\tcase 'year':\n\t\t\t\treturn this.#date.getFullYear();\n\t\t\tcase 'month':\n\t\t\t\treturn this.#date.getMonth();\n\t\t\tcase 'day':\n\t\t\t\treturn this.#date.getDate();\n\t\t\tcase 'week':\n\t\t\t\treturn this.getWeek();\n\t\t\tcase 'hour':\n\t\t\t\treturn this.#date.getHours();\n\t\t\tcase 'minute':\n\t\t\t\treturn this.#date.getMinutes();\n\t\t\tcase 'second':\n\t\t\t\treturn this.#date.getSeconds();\n\t\t\tcase 'millisecond':\n\t\t\t\treturn this.#date.getMilliseconds();\n\t\t}\n\t}\n\n\t/**\n\t * @instance Returns a new Chronos instance with the specified unit set to the given value.\n\t * @param unit The unit to modify.\n\t * @param value The value to set for the unit.\n\t */\n\tset(unit: TimeUnit, value: number): Chronos {\n\t\tconst d = new Date(this.#date);\n\n\t\tswitch (unit) {\n\t\t\tcase 'year':\n\t\t\t\td.setFullYear(value);\n\t\t\t\tbreak;\n\t\t\tcase 'month':\n\t\t\t\td.setMonth(value);\n\t\t\t\tbreak;\n\t\t\tcase 'day':\n\t\t\t\td.setDate(value);\n\t\t\t\tbreak;\n\t\t\tcase 'week':\n\t\t\t\treturn this.setWeek(value);\n\t\t\tcase 'hour':\n\t\t\t\td.setHours(value);\n\t\t\t\tbreak;\n\t\t\tcase 'minute':\n\t\t\t\td.setMinutes(value);\n\t\t\t\tbreak;\n\t\t\tcase 'second':\n\t\t\t\td.setSeconds(value);\n\t\t\t\tbreak;\n\t\t\tcase 'millisecond':\n\t\t\t\td.setMilliseconds(value);\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn new Chronos(d).#withOrigin('set');\n\t}\n\n\t/**\n\t * @instance Returns the difference between this and another date in the given unit.\n\t * @param other The other date to compare.\n\t * @param unit The unit in which to return the difference.\n\t */\n\tdiff(other: ChronosInput, unit: TimeUnit): number {\n\t\tconst time = other instanceof Chronos ? other : new Chronos(other);\n\n\t\tconst msDiff = this.#date.getTime() - time.toDate().getTime();\n\n\t\tswitch (unit) {\n\t\t\tcase 'millisecond':\n\t\t\t\treturn msDiff;\n\t\t\tcase 'second':\n\t\t\t\treturn msDiff / 1e3;\n\t\t\tcase 'minute':\n\t\t\t\treturn msDiff / 6e4;\n\t\t\tcase 'hour':\n\t\t\t\treturn msDiff / 3.6e6;\n\t\t\tcase 'day':\n\t\t\t\treturn msDiff / 8.64e7;\n\t\t\tcase 'week':\n\t\t\t\treturn msDiff / 6.048e8;\n\t\t\tcase 'month':\n\t\t\t\treturn (\n\t\t\t\t\t(this.get('year') - time.get('year')) * 12 +\n\t\t\t\t\t(this.get('month') - time.get('month'))\n\t\t\t\t);\n\t\t\tcase 'year':\n\t\t\t\treturn this.get('year') - time.get('year');\n\t\t}\n\t}\n\n\t/**\n\t * @instance Returns a human-readable relative calendar time like \"Today at 3:00 PM\"\n\t * @param baseDate Optional base date to compare with.\n\t */\n\tcalendar(baseDate?: ChronosInput): string {\n\t\tconst base = baseDate ? new Chronos(baseDate) : new Chronos();\n\t\tconst input = this.startOf('day');\n\n\t\tconst comparison = base.startOf('day');\n\t\tconst diff = input.diff(comparison, 'day');\n\n\t\tconst timeStr = this.toDate().toLocaleString(undefined, {\n\t\t\thour: 'numeric',\n\t\t\tminute: '2-digit',\n\t\t});\n\n\t\tif (diff === 0) return `Today at ${timeStr}`;\n\t\tif (diff === 1) return `Tomorrow at ${timeStr}`;\n\t\tif (diff === -1) return `Yesterday at ${timeStr}`;\n\n\t\treturn this.toDate().toLocaleString(undefined, {\n\t\t\tmonth: 'long',\n\t\t\tday: '2-digit',\n\t\t\tyear: 'numeric',\n\t\t\tweekday: 'long',\n\t\t\thour: 'numeric',\n\t\t\tminute: '2-digit',\n\t\t});\n\t}\n\n\t/** @instance Returns a short human-readable string like \"2h ago\", \"in 5m\" */\n\tfromNowShort(): string {\n\t\tconst now = new Chronos();\n\t\tconst diffInSeconds = this.diff(now, 'second');\n\n\t\tconst abs = Math.abs(diffInSeconds);\n\n\t\tconst suffix = diffInSeconds >= 0 ? 'in ' : '';\n\t\tconst postfix = diffInSeconds < 0 ? ' ago' : '';\n\n\t\tif (abs < 60) {\n\t\t\treturn `${suffix}${Math.floor(abs)}s${postfix}`;\n\t\t} else if (abs < 3600) {\n\t\t\treturn `${suffix}${Math.floor(abs / 60)}m${postfix}`;\n\t\t} else if (abs < 86400) {\n\t\t\treturn `${suffix}${Math.floor(abs / 3600)}h${postfix}`;\n\t\t} else if (abs < 2592000) {\n\t\t\treturn `${suffix}${Math.floor(abs / 86400)}d${postfix}`;\n\t\t} else if (abs < 31536000) {\n\t\t\treturn `${suffix}${Math.floor(abs / 2592000)}mo${postfix}`;\n\t\t} else {\n\t\t\treturn `${suffix}${Math.floor(abs / 31536000)}y${postfix}`;\n\t\t}\n\t}\n\n\t/**\n\t * @instance Sets the date to the Monday of the specified ISO week number within the current year.\n\t * This method assumes ISO week logic, where week 1 is the week containing January 4th.\n\t *\n\t * @param week The ISO week number (1–53) to set the date to.\n\t * @returns A new Chronos instance set to the start (Monday) of the specified week.\n\t */\n\tsetWeek(week: number): Chronos {\n\t\tconst d = new Date(this.#date);\n\n\t\tconst year = d.getFullYear();\n\t\tconst jan4 = new Date(year, 0, 4);\n\t\tconst dayOfWeek = jan4.getDay() || 7; // Make Sunday (0) into 7\n\t\tconst weekStart = new Date(jan4);\n\t\tweekStart.setDate(jan4.getDate() - (dayOfWeek - 1)); // Move to Monday\n\n\t\tweekStart.setDate(weekStart.getDate() + (week - 1) * 7); // Move to target week\n\t\td.setFullYear(weekStart.getFullYear());\n\t\td.setMonth(weekStart.getMonth());\n\t\td.setDate(weekStart.getDate());\n\n\t\treturn new Chronos(d).#withOrigin('setWeek');\n\t}\n\n\t/**\n\t * @instance Calculates the ISO 8601 week number of the year.\n\t *\n\t * ISO weeks start on Monday, and the first week of the year is the one containing January 4th.\n\t *\n\t * @returns Week number (1–53).\n\t */\n\tgetWeek(): number {\n\t\tconst target = this.startOf('week', 1).add(3, 'day'); // Thursday of current ISO week\n\n\t\tconst firstThursday = new Chronos(target.year, 1, 4) // January 4\n\t\t\t.startOf('week', 1)\n\t\t\t.add(3, 'day'); // Thursday of first ISO week\n\n\t\treturn target.diff(firstThursday, 'week') + 1;\n\t}\n\n\t/**\n\t * @instance Calculates the week number of the year based on custom week start.\n\t * @param weekStartsOn Optional: Day the week starts on (0 = Sunday, 1 = Monday). Applicable if week day is required. Default is `0`.\n\t * @returns Week number (1-53).\n\t */\n\tgetWeekOfYear(weekStartsOn: number = 0): number {\n\t\tconst startOfYear = new Chronos(this.year, 1, 1);\n\t\tconst startOfFirstWeek = startOfYear.startOf('week', weekStartsOn);\n\n\t\tconst week = this.startOf('week', weekStartsOn).diff(\n\t\t\tstartOfFirstWeek,\n\t\t\t'week',\n\t\t);\n\n\t\treturn week + 1;\n\t}\n\n\t/**\n\t * @instance Returns the ISO week-numbering year for the current date.\n\t *\n\t * The ISO week-numbering year may differ from the calendar year.\n\t * For example, January 1st may fall in the last ISO week of the previous year.\n\t *\n\t * @param weekStartsOn Optional: Defines the start day of the week (0 = Sunday, 1 = Monday).\n\t * Defaults to 0 (Sunday). Use 1 for strict ISO 8601.\n\t * @returns The ISO week-numbering year.\n\t */\n\tgetWeekYear(weekStartsOn: number = 0): number {\n\t\tconst d = this.startOf('week', weekStartsOn).add(3, 'day'); // Thursday of current ISO week\n\t\treturn d.year;\n\t}\n\n\t/** @instance Returns day of year (1 - 366) */\n\tgetDayOfYear(): number {\n\t\tconst start = new Date(this.year, 0, 1);\n\t\tconst diff = this.#date.getTime() - start.getTime();\n\t\treturn Math.floor(diff / 86400000) + 1;\n\t}\n\n\t/**\n\t * @instance Returns the zodiac sign for the current date.\n\t * @returns The Western zodiac sign.\n\t */\n\tgetZodiacSign(): ZodiacSign {\n\t\tconst day = this.#date.getDate();\n\t\tconst month = this.#date.getMonth() + 1;\n\n\t\tfor (const [sign, [m, d]] of ZODIAC_SIGNS) {\n\t\t\tif (month === m && day <= d) {\n\t\t\t\treturn sign;\n\t\t\t}\n\t\t}\n\n\t\treturn 'Capricorn';\n\t}\n\n\t/** @instance Returns number of days in current month */\n\tdaysInMonth(): number {\n\t\treturn new Date(this.year, this.month + 1, 0).getDate();\n\t}\n\n\t/** @instance Converts to object with all date unit parts */\n\ttoObject(): ChronosObject {\n\t\treturn Object.fromEntries([...this]) as unknown as ChronosObject;\n\t}\n\n\t/** @instance Converts to array with all date unit parts */\n\ttoArray() {\n\t\treturn Object.values(this.toObject());\n\t}\n\n\t/**\n\t * @instance Returns the academic year based on a typical start in July and end in June.\n\t * @returns The academic year in format `YYYY-YYYY`.\n\t */\n\ttoAcademicYear(): `${number}-${number}` {\n\t\tconst year = this.#date.getFullYear();\n\t\tconst month = this.#date.getMonth();\n\t\tif (month >= 6) {\n\t\t\treturn `${year}-${year + 1}`;\n\t\t}\n\t\treturn `${year - 1}-${year}`;\n\t}\n\n\t/**\n\t * @instance Returns the **calendar quarter** (1 to 4) of the current date.\n\t *\n\t * @remarks\n\t * A calendar year is divided into four quarters:\n\t *\n\t * - `Q1`: January to March\n\t * - `Q2`: April to June\n\t * - `Q3`: July to September\n\t * - `Q4`: October to December\n\t *\n\t * This method strictly uses the **calendar year**. For fiscal quarters, use `toFiscalQuarter()` instead.\n\t *\n\t * @example\n\t * new Chronos('2025-02-14').toQuarter(); // 1\n\t * new Chronos('2025-08-09').toQuarter(); // 3\n\t *\n\t * @returns The calendar quarter number (1–4).\n\t */\n\ttoQuarter(): Quarter {\n\t\tconst month = this.#date.getMonth();\n\t\treturn (Math.floor(month / 3) + 1) as Quarter;\n\t}\n\n\t/**\n\t * @instance Returns the fiscal quarter based on custom fiscal year start (defaults to July).\n\t * @param startMonth - The fiscal year start month (1-12), default is July (7).\n\t * @returns The fiscal quarter (1-4).\n\t */\n\ttoFiscalQuarter(startMonth: number = 7): Quarter {\n\t\tconst month = this.#date.getMonth() + 1;\n\t\tconst adjusted = (month - startMonth + 12) % 12;\n\t\treturn (Math.floor(adjusted / 3) + 1) as Quarter;\n\t}\n\n\t/**\n\t * @instance Returns the system's current UTC offset formatted as `+06:00` or `-07:00`.\n\t *\n\t * - *Unlike `Date.prototype.getTimezoneOffset()`, which returns the offset in minutes **behind** UTC (positive for locations west of UTC and negative for east), this method returns the more intuitive sign format used in time zone representations (e.g., `UTC+06:00` means 6 hours **ahead** of UTC).*\n\t *\n\t * @returns The (local) system's UTC offset in `±HH:mm` format.\n\t */\n\tgetUTCOffset(): string {\n\t\tconst offset = -this.#date.getTimezoneOffset();\n\t\tconst sign = offset >= 0 ? '+' : '-';\n\n\t\tconst pad = (n: number) =>\n\t\t\tString(Math.floor(Math.abs(n))).padStart(2, '0');\n\n\t\treturn `${sign}${pad(offset / 60)}:${pad(offset % 60)}`;\n\t}\n\n\t/**\n\t * @instance Returns the timezone offset of this `Chronos` instance in `+06:00` or `-07:00` format maintaining current timezone.\n\t *\n\t * - *Unlike `Date.prototype.getTimezoneOffset()`, which returns the offset in minutes **behind** UTC (positive for locations west of UTC and negative for east), this method returns the more intuitive sign format used in time zone representations (e.g., `UTC+06:00` means 6 hours **ahead** of UTC).*\n\t *\n\t * @returns The timezone offset string in `±HH:mm` format maintaining the current timezone regardless of system having different one.\n\t */\n\tgetTimeZoneOffset(): string {\n\t\treturn this.#offset.replace('UTC', '');\n\t}\n\n\t/**\n\t * @instance Returns the system's UTC offset in minutes.\n\t *\n\t * - *Unlike JavaScript's `Date.prototype.getTimezoneOffset()`, this method returns a positive value if the local time is ahead of UTC, and negative if behind UTC.*\n\t *\n\t * For example, for `UTC+06:00`, this returns `360`; for `UTC-05:30`, this returns `-330`.\n\t *\n\t * @returns The system's UTC offset in minutes, matching the sign convention used in `±HH:mm`.\n\t */\n\tgetUTCOffsetMinutes(): number {\n\t\treturn -this.#date.getTimezoneOffset();\n\t}\n\n\t/**\n\t * @instance Returns the current `Chronos` instance's UTC offset in minutes.\n\t *\n\t * This reflects the parsed or stored offset used internally by Chronos and follows the same\n\t * sign convention: positive for timezones ahead of UTC, negative for behind.\n\t *\n\t * @returns The UTC offset in minutes maintaining the current timezone regardless of system having different one.\n\t */\n\tgetTimeZoneOffsetMinutes(): number {\n\t\treturn extractMinutesFromUTC(this.#offset);\n\t}\n\n\t/** @instance Returns new Chronos instance in UTC */\n\ttoUTC(): Chronos {\n\t\tif (this.#offset === 'UTC+00:00') {\n\t\t\treturn this.#withOrigin('toUTC');\n\t\t}\n\n\t\tconst date = this.#date;\n\n\t\tconst previousOffset = this.getTimeZoneOffsetMinutes();\n\n\t\tconst utc = new Date(date.getTime() - previousOffset * 60 * 1000);\n\n\t\treturn new Chronos(utc).#withOrigin('toUTC');\n\t}\n\n\t/** @instance Returns new Chronos instance in local time */\n\ttoLocal(): Chronos {\n\t\tconst previousOffset = this.getTimeZoneOffsetMinutes();\n\n\t\tconst localOffset = -this.#date.getTimezoneOffset();\n\n\t\tconst relativeOffset = previousOffset - localOffset;\n\n\t\tconst localTime = new Date(\n\t\t\tthis.#date.getTime() - relativeOffset * 60 * 1000,\n\t\t);\n\n\t\treturn new Chronos(localTime).#withOrigin('toLocal');\n\t}\n\n\t/**\n\t * @static Parses a date string with a given format (limited support only).\n\t *\n\t * * **Supported format tokens**:\n\t * - `YYYY`: Full year (e.g., 2023)\n\t * - `YY`: Two-digit year (e.g., 23 for 2023, 99 for 1999)\n\t * - `MM`: Month (01-12)\n\t * - `M`: Month (1-9)\n\t * - `DD`: Day of the month (01-31)\n\t * - `D`: Day of the month (1-9)\n\t * - `HH`: Hour (00-23)\n\t * - `H`: Hour (0-9)\n\t * - `mm`: Minute (00-59)\n\t * - `m`: Minute (0-9)\n\t * - `ss`: Second (00-59)\n\t * - `s`: Second (0-9)\n\t *\n\t * **Example**:\n\t * ```ts\n\t * Chronos.parse('23-12-31 15:30:45', 'YY-MM-DD HH:mm:ss');\n\t * // returns Chronos instance with the parsed date 2023-12-31T15:30:45\n\t * ```\n\t *\n\t * @param dateStr - The date string to be parsed\n\t * @param format - The format of the date string. Tokens like `YYYY`, `MM`, `DD`, `HH`, `mm`, `ss` are used to specify the structure.\n\t * @returns A new `Chronos` instance representing the parsed date.\n\t * @throws `Error` If the date string does not match the format.\n\t */\n\tstatic parse(dateStr: string, format: string): Chronos {\n\t\tconst tokenPatterns: Record<string, string> = {\n\t\t\tYYYY: '(?<YYYY>\\\\d{4})',\n\t\t\tYY: '(?<YY>\\\\d{2})',\n\t\t\tMM: '(?<MM>\\\\d{2})',\n\t\t\tM: '(?<M>\\\\d{1,2})',\n\t\t\tDD: '(?<DD>\\\\d{2})',\n\t\t\tD: '(?<D>\\\\d{1,2})',\n\t\t\tHH: '(?<HH>\\\\d{2})',\n\t\t\tH: '(?<H>\\\\d{1,2})',\n\t\t\tmm: '(?<mm>\\\\d{2})',\n\t\t\tm: '(?<m>\\\\d{1,2})',\n\t\t\tss: '(?<ss>\\\\d{2})',\n\t\t\ts: '(?<s>\\\\d{1,2})',\n\t\t};\n\n\t\tconst tokenToComponent: Record<string, keyof ChronosDateParts> = {\n\t\t\tYYYY: 'year',\n\t\t\tYY: 'year',\n\t\t\tMM: 'month',\n\t\t\tM: 'month',\n\t\t\tDD: 'date',\n\t\t\tD: 'date',\n\t\t\tHH: 'hour',\n\t\t\tH: 'hour',\n\t\t\tmm: 'minute',\n\t\t\tm: 'minute',\n\t\t\tss: 'second',\n\t\t\ts: 'second',\n\t\t};\n\n\t\ttype ChronosDateParts = {\n\t\t\tyear: number;\n\t\t\tmonth: number;\n\t\t\tdate: number;\n\t\t\thour: number;\n\t\t\tminute: number;\n\t\t\tsecond: number;\n\t\t};\n\n\t\tconst tokenRegex = new RegExp(\n\t\t\tObject.keys(tokenPatterns).join('|'),\n\t\t\t'g',\n\t\t);\n\n\t\tconst trimmedInput = dateStr.trim();\n\n\t\tconst regexStr = format\n\t\t\t.trim()\n\t\t\t.replace(tokenRegex, (token) => tokenPatterns[token] ?? token)\n\t\t\t.replace(/\\s+/g, '\\\\s*');\n\n\t\tconst match = new RegExp(`^${regexStr}\\\\s*$`).exec(trimmedInput);\n\n\t\tif (!match?.groups) {\n\t\t\tthrow new Error('Invalid date format');\n\t\t}\n\n\t\tconst parts: Partial<ChronosDateParts> = {};\n\n\t\tfor (const [token, value] of Object.entries(match.groups)) {\n\t\t\tconst key = tokenToComponent[token];\n\t\t\tif (key) {\n\t\t\t\tlet num = Number(value);\n\t\t\t\tif (token === 'YY') num += num < 100 ? 2000 : 0;\n\t\t\t\tparts[key] = num;\n\t\t\t}\n\t\t}\n\n\t\treturn new Chronos(\n\t\t\tnew Date(\n\t\t\t\tparts?.year ?? 1970,\n\t\t\t\t(parts?.month ?? 1) - 1,\n\t\t\t\tparts?.date ?? 1,\n\t\t\t\tparts?.hour ?? 0,\n\t\t\t\tparts?.minute ?? 0,\n\t\t\t\tparts?.second ?? 0,\n\t\t\t),\n\t\t).#withOrigin('parse');\n\t}\n\n\t/**\n\t * @instance Rounds the current date-time to the nearest specified unit and interval.\n\t *\n\t * - *Rounding is based on proximity to the start or end of the specified unit.*\n\t * - *For example, rounding `2025-05-23` by 'day' returns either midnight of May 23 or May 24, depending on the time of day.*\n\t *\n\t * @param unit - The time unit to round to (`year`, `month`, `week`, `day`, `hour`, `minute`, `second`, `millisecond`).\n\t * @param nearest - Optional granularity of rounding. (Defaults to `1`).\n\t *\n\t * @returns A new `Chronos` instance at the nearest rounded point in time. For wrong unit returns current instance.\n\t *\n\t * @remarks\n\t * - Rounding for `'month'` is based on how far into the month the date is. If past the midpoint, it rounds to the next month.\n\t * - Month indices are 0-based internally (January = 0), but the resulting date reflects the correct calendar month.\n\t * - For `'week'` unit, rounding is performed by comparing proximity to the start and end of the ISO week (Monday to Sunday).\n\t * - If the date is closer to the next Monday, it rounds forward; otherwise, it rounds back to the previous Monday.\n\t */\n\tround(unit: TimeUnit, nearest = 1): Chronos {\n\t\tconst date = new Date(this.#date);\n\n\t\tswitch (unit) {\n\t\t\tcase 'millisecond': {\n\t\t\t\tconst rounded = roundToNearest(date.getMilliseconds(), nearest);\n\n\t\t\t\tdate.setMilliseconds(rounded);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'second': {\n\t\t\t\tconst fullSecond =\n\t\t\t\t\tdate.getSeconds() + date.getMilliseconds() / 1000;\n\n\t\t\t\tconst rounded = roundToNearest(fullSecond, nearest);\n\t\t\t\tdate.setSeconds(rounded, 0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'minute': {\n\t\t\t\tconst fullMinute =\n\t\t\t\t\tdate.getMinutes() +\n\t\t\t\t\tdate.getSeconds() / 60 +\n\t\t\t\t\tdate.getMilliseconds() / 60000;\n\n\t\t\t\tconst rounded = roundToNearest(fullMinute, nearest);\n\t\t\t\tdate.setMinutes(rounded, 0, 0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'hour': {\n\t\t\t\tconst fullHour =\n\t\t\t\t\tdate.getHours() +\n\t\t\t\t\tdate.getMinutes() / 60 +\n\t\t\t\t\tdate.getSeconds() / 3600 +\n\t\t\t\t\tdate.getMilliseconds() / 3600000;\n\n\t\t\t\tconst rounded = roundToNearest(fullHour, nearest);\n\t\t\t\tdate.setHours(rounded, 0, 0, 0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'day': {\n\t\t\t\tconst fullDay =\n\t\t\t\t\tdate.getDate() +\n\t\t\t\t\t(date.getHours() / 24 +\n\t\t\t\t\t\tdate.getMinutes() / 1440 +\n\t\t\t\t\t\tdate.getSeconds() / 86400 +\n\t\t\t\t\t\tdate.getMilliseconds() / 86400000);\n\n\t\t\t\tconst rounded = roundToNearest(fullDay, nearest);\n\t\t\t\tdate.setDate(rounded);\n\t\t\t\tdate.setHours(0, 0, 0, 0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'week': {\n\t\t\t\tconst weekday = this.#date.getDay(); // 0 (Sun) to 6 (Sat)\n\t\t\t\tconst offsetToMonday = (weekday + 6) % 7; // 0 for Mon, 1 for Tue, ..., 6 for Sun\n\n\t\t\t\tconst startOfWeek = new Date(this.#date);\n\t\t\t\tstartOfWeek.setDate(startOfWeek.getDate() - offsetToMonday);\n\t\t\t\tstartOfWeek.setHours(0, 0, 0, 0);\n\n\t\t\t\tconst endOfWeek = new Date(startOfWeek);\n\t\t\t\tendOfWeek.setDate(endOfWeek.getDate() + 7);\n\n\t\t\t\tconst diffToStart = Math.abs(\n\t\t\t\t\tthis.#date.getTime() - startOfWeek.getTime(),\n\t\t\t\t);\n\n\t\t\t\tconst diffToEnd = Math.abs(\n\t\t\t\t\tendOfWeek.getTime() - this.#date.getTime(),\n\t\t\t\t);\n\n\t\t\t\tconst rounded =\n\t\t\t\t\tdiffToEnd < diffToStart ? endOfWeek : startOfWeek;\n\n\t\t\t\treturn new Chronos(rounded).#withOrigin('round');\n\t\t\t}\n\n\t\t\tcase 'month': {\n\t\t\t\tconst fullMonth =\n\t\t\t\t\tdate.getMonth() + date.getDate() / this.lastDateOfMonth;\n\n\t\t\t\tconst roundedMonth = roundToNearest(fullMonth, nearest);\n\t\t\t\tdate.setMonth(roundedMonth, 1);\n\t\t\t\tdate.setHours(0, 0, 0, 0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'year': {\n\t\t\t\tconst dayOfYear = Math.floor(\n\t\t\t\t\t(date.getTime() -\n\t\t\t\t\t\tnew Date(date.getFullYear(), 0, 1).getTime()) /\n\t\t\t\t\t\t86400000,\n\t\t\t\t);\n\n\t\t\t\tconst isLeap =\n\t\t\t\t\tnew Date(date.getFullYear(), 1, 29).getDate() === 29;\n\n\t\t\t\tconst totalDays = isLeap ? 366 : 365;\n\t\t\t\tconst fullYear = date.getFullYear() + dayOfYear / totalDays;\n\t\t\t\tconst roundedYear = roundToNearest(fullYear, nearest);\n\t\t\t\tdate.setFullYear(roundedYear, 0, 1);\n\t\t\t\tdate.setHours(0, 0, 0, 0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn this;\n\t\t}\n\n\t\treturn new Chronos(date).#withOrigin('round');\n\t}\n\n\t/**\n\t * @instance Returns the full time duration breakdown between current input (start) and another time (to).\n\t * @param toTime The time to compare with. Defaults to now.\n\t * @param absolute If true, returns all values as positive numbers. Defaults to `true`.\n\t * @returns An object of time units: years, months, days, hours, minutes, seconds, milliseconds.\n\t */\n\tduration(toTime?: ChronosInput, absolute = true): TimeDuration {\n\t\tconst now = this.#date;\n\t\tconst target = this.#toNewDate(toTime);\n\n\t\tconst isFuture = target > now;\n\t\tconst from = isFuture ? now : target;\n\t\tconst to = isFuture ? target : now;\n\n\t\tlet years = to.getFullYear() - from.getFullYear();\n\t\tlet months = to.getMonth() - from.getMonth();\n\t\tlet days = to.getDate() - from.getDate();\n\t\tlet hours = to.getHours() - from.getHours();\n\t\tlet minutes = to.getMinutes() - from.getMinutes();\n\t\tlet seconds = to.getSeconds() - from.getSeconds();\n\t\tlet milliseconds = to.getMilliseconds() - from.getMilliseconds();\n\n\t\tif (milliseconds < 0) {\n\t\t\tmilliseconds += 1000;\n\t\t\tseconds--;\n\t\t}\n\n\t\tif (seconds < 0) {\n\t\t\tseconds += 60;\n\t\t\tminutes--;\n\t\t}\n\n\t\tif (minutes < 0) {\n\t\t\tminutes += 60;\n\t\t\thours--;\n\t\t}\n\n\t\tif (hours < 0) {\n\t\t\thours += 24;\n\t\t\tdays--;\n\t\t}\n\n\t\tif (days < 0) {\n\t\t\tconst prevMonth = new Date(to.getFullYear(), to.getMonth(), 0);\n\t\t\tdays += prevMonth.getDate();\n\t\t\tmonths--;\n\t\t}\n\n\t\tif (months < 0) {\n\t\t\tmonths += 12;\n\t\t\tyears--;\n\t\t}\n\n\t\tconst result: TimeDuration = {\n\t\t\tyears,\n\t\t\tmonths,\n\t\t\tdays,\n\t\t\thours,\n\t\t\tminutes,\n\t\t\tseconds,\n\t\t\tmilliseconds,\n\t\t};\n\n\t\treturn this.#normalizeDuration(result, absolute, isFuture);\n\t}\n\n\t/**\n\t * @static Returns the current date and time in a specified format in local time.\n\t * * Default format is dd, `mmm DD, YYYY HH:mm:ss` = `Sun, Apr 06, 2025 16:11:55`\n\t * @param options - Configure format string and whether to format using utc offset.\n\t * @returns Formatted date string in desired format.\n\t */\n\tstatic today(options?: FormatOptions): string {\n\t\tconst { format = 'dd, mmm DD, YYYY HH:mm:ss', useUTC = false } =\n\t\t\toptions || {};\n\t\tconst today = new Date();\n\t\treturn new Chronos(today).#format(format, useUTC);\n\t}\n\n\t/**\n\t * @static Returns a new `Chronos` instance representing yesterday's date.\n\t *\n\t * @returns A `Chronos` instance for the previous calendar day.\n\t */\n\tstatic yesterday(): Chronos {\n\t\tconst today = new Date();\n\n\t\tconst yesterday = today.setDate(today.getDate() - 1);\n\n\t\treturn new Chronos(yesterday).#withOrigin('yesterday');\n\t}\n\n\t/**\n\t * @static Returns a new `Chronos` instance representing tomorrow's date.\n\t *\n\t * @returns A `Chronos` instance for the next calendar day.\n\t */\n\tstatic tomorrow(): Chronos {\n\t\tconst today = new Date();\n\n\t\tconst yesterday = today.setDate(today.getDate() + 1);\n\n\t\treturn new Chronos(yesterday).#withOrigin('tomorrow');\n\t}\n\n\t/**\n\t * @static Returns the number of milliseconds elapsed since midnight, January 1, 1970 Universal Coordinated Time (UTC).\n\t * * It basically calls `Date.now()`.\n\t * @returns The number of milliseconds elapsed since the Unix epoch.\n\t */\n\tstatic now(): number {\n\t\treturn Date.now();\n\t}\n\n\t/**\n\t * @static Creates a UTC-based Chronos instance.\n\t * If no date is provided, it uses the current date and time.\n\t *\n\t * **This is the base time, meaning conversion in other timezone will consider UTC time as the base time.**\n\t *\n\t * @param dateLike Optional input date to base the UTC time on.\n\t * If omitted, the current system date/time is used.\n\t * @returns A new Chronos instance representing the UTC equivalent of the input.\n\t */\n\tstatic utc(dateLike?: ChronosInput): Chronos {\n\t\tconst chronos = new Chronos(dateLike);\n\n\t\tif (chronos.#offset === 'UTC+00:00') {\n\t\t\treturn chronos.#withOrigin('utc');\n\t\t}\n\n\t\tconst previousOffset = chronos.getTimeZoneOffsetMinutes();\n\n\t\tconst date = chronos.#date;\n\n\t\tconst utc = new Date(date.getTime() - previousOffset * 60 * 1000);\n\n\t\treturn new Chronos(utc).#withOrigin('utc');\n\t}\n\n\t/**\n\t * @static Formats a time-only string into a formatted time string.\n\t *\n\t * @param time - Time string to be formatted. Supported formats include:\n\t * - `HH:mm` → e.g., `'14:50'`\n\t * - `HH:mm:ss` → e.g., `'14:50:00'`\n\t * - `HH:mm:ss.mss` → e.g., `'14:50:00.800'`\n\t * - `HH:mm+TimeZoneOffset(HH)` → e.g., `'14:50+06'`\n\t * - `HH:mm+TimeZoneOffset(HH:mm)` → e.g., `'14:50+06:00'`\n\t * - `HH:mm:ss+TimeZoneOffset(HH)` → e.g., `'14:50:00+06'`\n\t * - `HH:mm:ss+TimeZoneOffset(HH:mm)` → e.g., `'14:50:00+05:30'`\n\t * - `HH:mm:ss.mss+TimeZoneOffset(HH)` → e.g., `'14:50:00.800+06'`\n\t * - `HH:mm:ss.mss+TimeZoneOffset(HH:mm)` → e.g., `'14:50:00.800+06:30'`\n\t *\n\t * * *Input will default to today's date and assume local timezone if no offset is provided.*\n\t *\n\t * @param format - Format string accepted by `formatStrict()` method (`TimeParts`). Default: `hh:mm:ss a` → 02:33:36 pm.\n\t * @returns Formatted time string in local (System) time.\n\t */\n\tstatic formatTimePart(time: string, format?: TimeParts) {\n\t\tfunction normalizeOffset(timeStr: string): string {\n\t\t\treturn timeStr.replace(/([+-]\\d{2})(?!:)/, '$1:00');\n\t\t}\n\n\t\tconst timeWithDate = `${new Chronos().#format('YYYY-MM-DD')}T${normalizeOffset(\n\t\t\ttime,\n\t\t)}`;\n\n\t\treturn new Chronos(timeWithDate).formatStrict(format ?? 'hh:mm:ss a');\n\t}\n\n\t/**\n\t * @static Returns earliest Chronos\n\t * @param dates Date inputs.\n\t */\n\tstatic min(...dates: ChronosInput[]): Chronos {\n\t\treturn new Chronos(\n\t\t\tMath.min(...dates.map((d) => new Chronos(d).valueOf())),\n\t\t).#withOrigin('min');\n\t}\n\n\t/**\n\t * @static Returns latest Chronos\n\t * @param dates Date inputs.\n\t */\n\tstatic max(...dates: ChronosInput[]): Chronos {\n\t\treturn new Chronos(\n\t\t\tMath.max(...dates.map((d) => new Chronos(d).valueOf())),\n\t\t).#withOrigin('max');\n\t}\n\n\t/**\n\t * @static Checks if the year in the date string or year (from 0 - 9999) is a leap year.\n\t * - A year is a leap year if it is divisible by 4, but not divisible by 100, unless it is also divisible by 400.\n\t * - For example, 2000 and 2400 are leap years, but 1900 and 2100 are not.\n\t *\n\t * @description\n\t * This method accepts different types of date inputs and extracts the year to check if it's a leap year.\n\t * If the provided date is a `number`, it will be treated as a year (must be a valid year from 0 to 9999).\n\t * If the year is out of this range (negative or larger than 9999), it will be treated as a Unix timestamp.\n\t * If the provided date is a string or a `Date` object, it will be parsed and the year will be extracted.\n\t * If a `Chronos` instance is passed, the year will be directly accessed from the instance.\n\t *\n\t * @param date - A `number` (year or Unix timestamp), `string`, `Date`, or `Chronos` instance representing a date.\n\t * @returns `true` if the year is a leap year, `false` otherwise.\n\t */\n\tstatic isLeapYear(date: ChronosInput): boolean {\n\t\tlet year: number;\n\n\t\tif (typeof date === 'number') {\n\t\t\tif (date > 0 && date <= 9999) {\n\t\t\t\tyear = date;\n\t\t\t} else {\n\t\t\t\tyear = new Chronos(date).year;\n\t\t\t}\n\t\t} else {\n\t\t\tyear = date instanceof Chronos ? date.year : new Chronos(date).year;\n\t\t}\n\n\t\treturn isLeapYear(year);\n\t}\n\n\t/**\n\t * @static Checks if the given value is a valid `Date` object.\n\t * - A value is considered valid if it is an instance of the built-in `Date` class.\n\t * - This does not check whether the date itself is valid (e.g., `new Date('invalid')`).\n\t * @param value - The value to test.\n\t * @returns `true` if the value is a valid Date object, otherwise `false`.\n\t */\n\tstatic isValidDate(value: unknown): value is Date {\n\t\treturn value instanceof Date;\n\t}\n\n\t/**\n\t * @static Checks if the given value is a valid date string.\n\t * - A value is considered a valid date string if it is a string and can be parsed by `Date.parse()`.\n\t * - This uses the native JavaScript date parser internally.\n\t * @param value - The value to test.\n\t * @returns `true` if the value is a valid date string, otherwise `false`.\n\t */\n\tstatic isDateString(value: unknown): value is string {\n\t\treturn isString(value) && !isNaN(Date.parse(value));\n\t}\n\n\t/**\n\t * @static Checks if the given value is an instance of `Chronos`.\n\t * - Useful for verifying Chronos objects in type guards or validations.\n\t * @param value - The value to test.\n\t * @returns `true` if the value is an instance of `Chronos`, otherwise `false`.\n\t */\n\tstatic isValidChronos(value: unknown): value is Chronos {\n\t\treturn value instanceof Chronos;\n\t}\n}\n","import { Chronos } from './Chronos';\nimport type { ChronosInput, ChronosStatics } from './types';\n\n/**\n * * Converts a date into a Chronos object and access to all `Chronos` methods and properties.\n *\n * **Note**: *If a date is provided **without a time component**, the instance will default to `00:00:00.000` UTC\n * and convert it to the **equivalent local time** using the current environment's UTC offset.*\n *\n * @description\n * This function serves as a wrapper around the `Chronos` class constructor and allows you to create a new `Chronos` instance from various types of date representations.\n * The following types of input are supported:\n *\n * - **`string`**: A string representing a date, which can be parsed by the JavaScript `Date` constructor.\n * Example: `\"2023-12-31\"`.\n * - **`number`**: A timestamp representing the number of milliseconds since the Unix epoch.\n * Example: `1672531199000`.\n * - **`Date`**: A JavaScript `Date` object.\n * - **`Chronos`**: A `Chronos` instance created by the same constructor.\n * - **`year, month, date, hours, minutes, seconds, milliseconds`**: Individual components of a date-time to construct a `Chronos` instance.\n * - **`year`**: A number representing the year. If the year is between 0 and 99, it will be assumed to be the year 1900 + the provided year.\n * - **`month`**: A number between 1 and 12 representing the month (1 for January, 12 for December). It is adjusted internally to a 0-based index (0 for January, 11 for December).\n * - **`date`**: A number between 1 and 31 representing the day of the month.\n * - **`hours`**: A number between 0 and 23 representing the hour of the day.\n * - **`minutes`**: A number between 0 and 59 representing the minutes past the hour.\n * - **`seconds`**: A number between 0 and 59 representing the seconds past the minute.\n * - **`milliseconds`**: A number between 0 and 999 representing the milliseconds past the second.\n *\n * This function also allows you to access static methods from the `Chronos` class, as it copies all static methods from `Chronos` to the `chronos` function itself.\n * Therefore, static methods can be called either through the `Chronos` class directly or through the `chronos` function.\n *\n * @example\n * Example usage:\n *\n * ```ts\n * const chronosInstanceFn = chronos(\"2023-12-31\");\n * const chronosInstanceClass = new Chronos(\"2023-12-31\");\n * const sameInstanceFn = chronos.parse(\"2023-12-31\", \"YYYY-MM-DD\");\n * const sameInstanceClass = Chronos.parse(\"2023-12-31\", \"YYYY-MM-DD\");\n * ```\n *\n * @param valueOrYear The value in number, string, Date or Chronos format or the full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year.\n * @param month The month as a number between 1 and 12 (January to December).\n * @param date The date as a number between 1 and 31.\n * @param hours Must be supplied if minutes is supplied. A number from 0 to 23 (midnight to 11pm) that specifies the hour.\n * @param minutes Must be supplied if seconds is supplied. A number from 0 to 59 that specifies the minutes.\n * @param seconds Must be supplied if milliseconds is supplied. A number from 0 to 59 that specifies the seconds.\n * @param ms A number from 0 to 999 that specifies the milliseconds.\n *\n * @returns new `Chronos` instance representing the provided date with all methods and properties.\n *\n * @static\n * @remarks\n * Static methods can be accessed from both the `Chronos` class and the `chronos` function.\n * Static methods from the `Chronos` class are copied over to the `chronos` function, so you can call them like:\n * ```ts\n * chronos.parse(\"2023-12-31\", \"YYYY-MM-DD\");\n * // Or\n * Chronos.parse(\"2023-12-31\", \"YYYY-MM-DD\");\n * ```\n */\nconst chronos = /* @__PURE__ */ (\n\tvalueOrYear?: ChronosInput,\n\tmonth?: number,\n\tdate?: number,\n\thours?: number,\n\tminutes?: number,\n\tseconds?: number,\n\tms?: number,\n) => {\n\tlet newChronos: Chronos;\n\n\tif (typeof valueOrYear === 'number' && typeof month === 'number') {\n\t\tnewChronos = new Chronos(\n\t\t\tvalueOrYear,\n\t\t\tmonth,\n\t\t\tdate ?? 1,\n\t\t\thours ?? 0,\n\t\t\tminutes ?? 0,\n\t\t\tseconds ?? 0,\n\t\t\tms ?? 0,\n\t\t);\n\t} else {\n\t\tnewChronos = /* @__PURE__ */ new Chronos(valueOrYear);\n\t}\n\n\treturn newChronos;\n};\n\n/**\n * @remarks\n * Static methods from the `Chronos` class are copied over to the `chronos` function.\n * Therefore, you can access static methods from `Chronos` both through the `Chronos` class and the `chronos` function.\n *\n * **Note**: *If a date is provided **without a time component**, the instance will default to `00:00:00.000` UTC\n * and convert it to the **equivalent local time** using the current environment's UTC offset.*\n *\n * Example usage:\n * ```ts\n * chronos.parse(\"2023-12-31\", \"YYYY-MM-DD\");\n * // Or\n * Chronos.parse(\"2023-12-31\", \"YYYY-MM-DD\");\n * ```\n *\n * *No need to call `chronos` for accessing the static methods. Simply call the static methods.*\n *\n * **Available Static Methods:**\n *\n * ```ts\n * today(options?: FormatOptions): string\n * yesterday(): Chronos;\n * tomorrow(): Chronos\n * now(): number\n * parse(dateStr: string, format: string): Chronos\n * utc(dateLike: ChronosInput): Chronos\n * min(...dates: ChronosInput[]): Chronos\n * max(...dates: ChronosInput[]): Chronos\n * isLeapYear(date: ChronosInput): boolean\n * isValidDate(value: unknown): boolean\n * isDateString(value: unknown): boolean\n * isValidChronos(value: unknown): boolean\n * formatTimePart(time: string, format?: TimeParts): string\n * ```\n */\nconst typedChronos = /* @__PURE__ */ chronos as ChronosStatics;\n\n// ? Add static methods from Chronos class to the chronos function\n// Object.getOwnPropertyNames(Chronos).forEach((method) => {\n// \t// Exclude non-method properties like `length`, `name`, `prototype`\n// \tif (method !== 'prototype' && method !== 'name' && method !== 'length') {\n// \t\t(chronos as Any)[method] = (Chronos as Any)[method];\n// \t}\n// });\n\ntypedChronos.now = Chronos.now;\ntypedChronos.min = Chronos.min;\ntypedChronos.max = Chronos.max;\ntypedChronos.utc = Chronos.utc;\ntypedChronos.parse = Chronos.parse;\ntypedChronos.today = Chronos.today;\ntypedChronos.tomorrow = Chronos.tomorrow;\ntypedChronos.yesterday = Chronos.yesterday;\ntypedChronos.isLeapYear = Chronos.isLeapYear;\ntypedChronos.isValidDate = Chronos.isValidDate;\ntypedChronos.isDateString = Chronos.isDateString;\ntypedChronos.isValidChronos = Chronos.isValidChronos;\ntypedChronos.formatTimePart = Chronos.formatTimePart;\n\nexport { typedChronos as chronos };\n"]}
|