nhb-toolbox 4.26.20 → 4.26.30

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/CHANGELOG.md CHANGED
@@ -6,6 +6,27 @@ All notable changes to the package will be documented here.
6
6
 
7
7
  ---
8
8
 
9
+ ## [4.26.30] - 2025-11-11
10
+
11
+ ### 🕧 Updates in Chronos
12
+
13
+ - **Fixed** issues in `getTimeZoneName()` and `getTimeZoneNameShort()` where expected outputs were *missing or incorrect*.
14
+ - **Updated** *timezone constants*vby removing *redundant hints* and *improving internal consistency*.
15
+ - **Introduced** a new *method alias* `getTimeZoneNameAbbr()` for `getTimeZoneNameShort()`.
16
+ - **Fixed** an issue where the `clone()` method *did not correctly duplicate the instance state*.
17
+
18
+ ## [4.26.21] - 2025-11-10
19
+
20
+ ### 🕧 Updates in Chronos
21
+
22
+ - **Fixed** issues with `Chronos` timezone methods: `getTimeZoneName()` and `getTimeZoneNameShort()` *not providing name/short name* for *optional UTC*.
23
+ - **Fixed** issues with `Chronos` `diff()` method: now *calculates exact differences for month and year* too.
24
+ - **Changed** the signature of `Chronos` `set()` method to `set<Unit extends TimeUnit>(unit: Unit, value: TimeUnitValue<Unit>): Chronos`. **Created** new type helper `TimeUnitValue<Unit>`.
25
+
26
+ ### 🛠️ Other Updates
27
+
28
+ - **Renamed** `isValidUTCOffSet` *guard* as `isValidUTCOffset` and also kept `isValidUTCOffSet` as alias.
29
+
9
30
  ## [4.26.20] - 2025-11-10
10
31
 
11
32
  ### 🕧 Updates in Chronos
@@ -81,9 +81,9 @@ class Chronos {
81
81
  case 'timeZone':
82
82
  case 'toUTC':
83
83
  case 'utc':
84
- return string.replace(this.#isoTzRemoved(), replacement);
84
+ return string.replace(this.#removeUTCFromISO(), replacement);
85
85
  default:
86
- return string.replace(this.#isoTzRemoved(true), replacement);
86
+ return string.replace(this.#removeUTCFromISO(true), replacement);
87
87
  }
88
88
  }
89
89
  [Symbol.search](string) {
@@ -91,9 +91,9 @@ class Chronos {
91
91
  case 'timeZone':
92
92
  case 'toUTC':
93
93
  case 'utc':
94
- return string.indexOf(this.#isoTzRemoved());
94
+ return string.indexOf(this.#removeUTCFromISO());
95
95
  default:
96
- return string.indexOf(this.#isoTzRemoved(true));
96
+ return string.indexOf(this.#removeUTCFromISO(true));
97
97
  }
98
98
  }
99
99
  [Symbol.split](string) {
@@ -101,9 +101,9 @@ class Chronos {
101
101
  case 'timeZone':
102
102
  case 'toUTC':
103
103
  case 'utc':
104
- return string.split(this.#isoTzRemoved());
104
+ return string.split(this.#removeUTCFromISO());
105
105
  default:
106
- return string.split(this.#isoTzRemoved(true));
106
+ return string.split(this.#removeUTCFromISO(true));
107
107
  }
108
108
  }
109
109
  [Symbol.match](string) {
@@ -229,7 +229,7 @@ class Chronos {
229
229
  const pad = (n, p = 2) => String(n).padStart(p, '0');
230
230
  return `${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()}`;
231
231
  }
232
- #isoTzRemoved(local = false) {
232
+ #removeUTCFromISO(local = false) {
233
233
  return local ?
234
234
  this.toLocalISOString().replace(/\.\d+(Z|[+-]\d{2}:\d{2})?$/, '')
235
235
  : this.toISOString().replace(/\.\d+(Z|[+-]\d{2}:\d{2})?$/, '');
@@ -284,7 +284,7 @@ class Chronos {
284
284
  return this.getTimeStamp();
285
285
  }
286
286
  clone() {
287
- return new _a(this.#date).#withOrigin(this.#ORIGIN);
287
+ return new _a(this.#date).#withOrigin(this.#ORIGIN, this.#offset, this.timeZoneName, this.timeZoneId, this.$tzTracker);
288
288
  }
289
289
  toDate() {
290
290
  switch (this.#ORIGIN) {
@@ -449,7 +449,7 @@ class Chronos {
449
449
  }
450
450
  }
451
451
  isDST() {
452
- const year = this.#date.getFullYear();
452
+ const year = this.year;
453
453
  const jan = new Date(year, 0, 1).getTimezoneOffset();
454
454
  const jul = new Date(year, 6, 1).getTimezoneOffset();
455
455
  return this.#date.getTimezoneOffset() < Math.max(jan, jul);
@@ -573,7 +573,7 @@ class Chronos {
573
573
  d.setFullYear(value);
574
574
  break;
575
575
  case 'month':
576
- d.setMonth(value);
576
+ d.setMonth(value - 1);
577
577
  break;
578
578
  case 'day':
579
579
  d.setDate(value);
@@ -611,11 +611,16 @@ class Chronos {
611
611
  return msDiff / 8.64e7;
612
612
  case 'week':
613
613
  return msDiff / 6.048e8;
614
- case 'month':
615
- return ((this.get('year') - time.get('year')) * 12 +
616
- (this.get('month') - time.get('month')));
614
+ case 'month': {
615
+ const yearDiff = this.get('year') - time.get('year');
616
+ const monthDiff = this.get('month') - time.get('month');
617
+ const totalMonthDiff = yearDiff * 12 + monthDiff;
618
+ const dayDiff = this.get('day') - time.get('day');
619
+ const daysInMonth = new Date(this.get('year'), this.get('month'), 0).getDate();
620
+ return totalMonthDiff + dayDiff / daysInMonth;
621
+ }
617
622
  case 'year':
618
- return this.get('year') - time.get('year');
623
+ return this.diff(time, 'month') / 12;
619
624
  }
620
625
  }
621
626
  calendar(baseDate) {
@@ -847,7 +852,7 @@ class Chronos {
847
852
  return now
848
853
  .startOf('month')
849
854
  .set('year', year ?? now.year)
850
- .set('month', month ? month - 1 : now.month).lastDateOfMonth;
855
+ .set('month', month ?? now.isoMonth).lastDateOfMonth;
851
856
  };
852
857
  return new _a(year ?? now.year, month ?? now.isoMonth, date ? date
853
858
  : now.isLastDayOfMonth() && now.date >= nextLDoM() ? nextLDoM()
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isValidTime = isValidTime;
4
- exports.isValidUTCOffSet = isValidUTCOffSet;
4
+ exports.isValidUTCOffset = isValidUTCOffset;
5
5
  exports.isValidTimeZoneId = isValidTimeZoneId;
6
6
  exports.isLeapYear = isLeapYear;
7
7
  exports.isDateLike = isDateLike;
@@ -19,7 +19,7 @@ function isValidTime(value) {
19
19
  const minute = Number(minuteStr);
20
20
  return hour >= 0 && hour <= 23 && minute >= 0 && minute <= 59;
21
21
  }
22
- function isValidUTCOffSet(value) {
22
+ function isValidUTCOffset(value) {
23
23
  return (0, primitives_1.isString)(value) ? /^UTC[+-]?\d{1,2}:\d{2}$/.test(value) : false;
24
24
  }
25
25
  function isValidTimeZoneId(value) {
@@ -7,6 +7,13 @@ const timezone_1 = require("../timezone");
7
7
  const utils_1 = require("../utils");
8
8
  const timeZonePlugin = (ChronosClass) => {
9
9
  const { internalDate: $Date, withOrigin } = ChronosClass[constants_1.INTERNALS];
10
+ const _isGMT = (factor) => {
11
+ return factor === 'UTC+00:00' || factor === 'UTC-00:00';
12
+ };
13
+ const TZ_NAME_ABBR_MAP = new Map(Object.entries(timezone_1.TIME_ZONES).map(([tzAbbr, { offset, tzName }]) => [
14
+ offset,
15
+ { tzAbbr, tzName },
16
+ ]));
10
17
  const _isLabelKey = (offset) => {
11
18
  return offset in timezone_1.TIME_ZONE_LABELS;
12
19
  };
@@ -17,8 +24,14 @@ const timeZonePlugin = (ChronosClass) => {
17
24
  return undefined;
18
25
  };
19
26
  const _getTimeZoneName = (zone) => {
20
- if ((0, guards_1.isValidUTCOffSet)(zone)) {
21
- return _resolveTzName(zone);
27
+ if (_isGMT(zone))
28
+ return 'Greenwich Mean Time';
29
+ if ((0, guards_1.isValidUTCOffset)(zone)) {
30
+ const tzName = _resolveTzName(zone);
31
+ if (!tzName && TZ_NAME_ABBR_MAP.has(zone)) {
32
+ return TZ_NAME_ABBR_MAP.get(zone)?.tzName;
33
+ }
34
+ return tzName;
22
35
  }
23
36
  else if ((0, guards_1.isValidTimeZoneId)(zone)) {
24
37
  const record = timezone_1.TIME_ZONE_IDS[zone];
@@ -27,17 +40,17 @@ const timeZonePlugin = (ChronosClass) => {
27
40
  else {
28
41
  return zone in timezone_1.TIME_ZONES ?
29
42
  timezone_1.TIME_ZONES[zone].tzName
30
- : _resolveTzName(timezone_1.TIME_ZONES[zone].offset);
43
+ : _resolveTzName(timezone_1.TIME_ZONES[zone]?.offset);
31
44
  }
32
45
  };
33
- const TZ_ID_CACHE = new Map(Object.entries(timezone_1.TIME_ZONE_IDS).reduce((acc, [id, { offset }]) => {
46
+ const TZ_ID_MAP = new Map(Object.entries(timezone_1.TIME_ZONE_IDS).reduce((acc, [id, { offset }]) => {
34
47
  const arr = acc.get(offset) ?? [];
35
48
  arr.push(id);
36
49
  acc.set(offset, arr);
37
50
  return acc;
38
51
  }, new Map()));
39
52
  const _getTimeZoneId = (utc) => {
40
- const tzIds = TZ_ID_CACHE.get(utc);
53
+ const tzIds = TZ_ID_MAP.get(utc);
41
54
  if (!tzIds || tzIds?.length === 0)
42
55
  return undefined;
43
56
  if (tzIds?.length === 1)
@@ -47,7 +60,7 @@ const timeZonePlugin = (ChronosClass) => {
47
60
  ChronosClass.prototype.timeZone = function (zone) {
48
61
  let offset;
49
62
  let tzId;
50
- if ((0, guards_1.isValidUTCOffSet)(zone)) {
63
+ if ((0, guards_1.isValidUTCOffset)(zone)) {
51
64
  offset = zone;
52
65
  tzId = _getTimeZoneId(offset) || offset;
53
66
  }
@@ -59,51 +72,72 @@ const timeZonePlugin = (ChronosClass) => {
59
72
  offset = zone in timezone_1.TIME_ZONES ? timezone_1.TIME_ZONES[zone].offset : timezone_1.TIME_ZONES['UTC'].offset;
60
73
  tzId = _getTimeZoneId(offset) || offset;
61
74
  }
62
- const tzName = _getTimeZoneName(zone) ?? timezone_1.TIME_ZONES['UTC'].offset;
75
+ const $zone = zone || offset;
76
+ const tzName = _getTimeZoneName($zone) ?? offset;
63
77
  const targetOffset = (0, utils_1.extractMinutesFromUTC)(offset);
64
78
  const previousOffset = this.getTimeZoneOffsetMinutes();
65
79
  const relativeOffset = targetOffset - previousOffset;
66
80
  const adjustedTime = new Date($Date(this).getTime() + relativeOffset * 60 * 1000);
67
81
  const instance = new ChronosClass(adjustedTime);
68
- return withOrigin(instance, `timeZone`, offset, tzName, tzId, zone);
82
+ return withOrigin(instance, `timeZone`, offset, tzName, tzId, $zone);
69
83
  };
70
84
  ChronosClass.prototype.getTimeZoneName = function (utc) {
71
- const UTC = utc ?? this.utcOffset;
72
- return _getTimeZoneName(this?.$tzTracker ?? UTC) ?? UTC;
85
+ const UTC = utc || this.utcOffset;
86
+ return _getTimeZoneName(utc || this?.$tzTracker || this.utcOffset) ?? UTC;
87
+ };
88
+ const TZ_ABBR_CACHE = new Map();
89
+ const _abbreviate = (name) => {
90
+ return name
91
+ .split(/\s+/)
92
+ .map((w) => w[0])
93
+ .join('')
94
+ .replace(/\W/g, '');
73
95
  };
74
- const TZ_SHORT_CACHE = new Map();
75
96
  ChronosClass.prototype.getTimeZoneNameShort = function (utc) {
76
97
  const tracker = this?.$tzTracker;
98
+ const UTC = utc || this.utcOffset;
99
+ const tzMapKey = utc || tracker || this.utcOffset;
100
+ if (_isGMT(tzMapKey))
101
+ return 'GMT';
77
102
  if (!utc && tracker && tracker in timezone_1.TIME_ZONES)
78
103
  return tracker;
79
- const zone = this.getTimeZoneName(utc);
80
- if (TZ_SHORT_CACHE.has(zone))
81
- return TZ_SHORT_CACHE.get(zone);
82
- const customAbbr = (0, guards_1.isValidUTCOffSet)(zone) || (0, guards_1.isValidTimeZoneId)(zone) ?
83
- zone
84
- : zone
85
- .split(/\s+/)
86
- .map((w) => w?.[0])
87
- .join('')
88
- .replace(/\W/g, '');
89
- TZ_SHORT_CACHE.set(zone, customAbbr);
104
+ if ((0, guards_1.isValidUTCOffset)(tzMapKey)) {
105
+ if (TZ_ABBR_CACHE.has(tzMapKey))
106
+ return TZ_ABBR_CACHE.get(tzMapKey);
107
+ if (TZ_NAME_ABBR_MAP.has(tzMapKey)) {
108
+ return TZ_NAME_ABBR_MAP.get(tzMapKey)?.tzAbbr;
109
+ }
110
+ const tzName = _resolveTzName(tzMapKey);
111
+ if (tzName) {
112
+ const tzAbbr = _abbreviate(tzName);
113
+ TZ_ABBR_CACHE.set(tzMapKey, tzAbbr);
114
+ return tzAbbr;
115
+ }
116
+ }
117
+ const zone = _getTimeZoneName(tzMapKey) ?? UTC;
118
+ if (TZ_ABBR_CACHE.has(`name-${zone}`))
119
+ return TZ_ABBR_CACHE.get(zone);
120
+ const customAbbr = (0, guards_1.isValidUTCOffset)(zone) || (0, guards_1.isValidTimeZoneId)(zone) ? zone : _abbreviate(zone);
121
+ TZ_ABBR_CACHE.set(`name-${zone}`, customAbbr);
90
122
  return customAbbr;
91
123
  };
124
+ ChronosClass.prototype.getTimeZoneNameAbbr = function (utc) {
125
+ return this.getTimeZoneNameShort(utc);
126
+ };
92
127
  ChronosClass.prototype.toString = function () {
93
128
  const offset = this.utcOffset;
129
+ const search = /GMT[+-]\d{4}\s+\([^)]+\)/;
94
130
  switch (this.origin) {
95
131
  case 'timeZone': {
96
132
  const gmt = offset.replace('UTC', 'GMT').replace(':', '');
97
133
  const label = this.getTimeZoneName();
98
- return $Date(this)
99
- .toString()
100
- .replace(/GMT[+-]\d{4}\s+\([^)]+\)/, `${gmt} (${label})`);
134
+ return $Date(this).toString().replace(search, `${gmt} (${label})`);
101
135
  }
102
136
  case 'toUTC':
103
137
  case 'utc': {
104
138
  return $Date(this)
105
139
  .toString()
106
- .replace(/GMT[+-]\d{4}\s+\([^)]+\)/, `GMT+0000 (Coordinated Universal Time)`);
140
+ .replace(search, `GMT+0000 (Coordinated Universal Time)`);
107
141
  }
108
142
  default:
109
143
  return $Date(this).toString();
@@ -251,7 +251,7 @@ exports.TIME_ZONES = Object.freeze({
251
251
  offset: 'UTC+07:00',
252
252
  },
253
253
  DDUT: {
254
- tzName: "Dumont d'Urville Time (in French Antarctic Station)",
254
+ tzName: "Dumont d'Urville Time (Antarctic Station in French)",
255
255
  offset: 'UTC+10:00',
256
256
  },
257
257
  DFT: {
@@ -399,7 +399,7 @@ exports.TIME_ZONES = Object.freeze({
399
399
  offset: 'UTC+07:00',
400
400
  },
401
401
  IDLW: {
402
- tzName: 'International Date Line West time zone',
402
+ tzName: 'International Date Line West',
403
403
  offset: 'UTC-12:00',
404
404
  },
405
405
  IDT: {
@@ -892,7 +892,7 @@ exports.TIME_ZONE_LABELS = Object.freeze({
892
892
  'UTC+10:30': 'Lord Howe Standard Time',
893
893
  'UTC+11:00': 'Central Pacific Standard Time',
894
894
  'UTC+12:00': 'New Zealand Standard Time',
895
- 'UTC+12:45': 'Chatham Islands Time',
895
+ 'UTC+12:45': 'Chatham Standard Time',
896
896
  'UTC+13:00': 'Phoenix Island Time',
897
897
  'UTC+14:00': 'Line Islands Time',
898
898
  });
package/dist/cjs/index.js CHANGED
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.convertToDecimal = exports.calculateLCM = exports.calculateLCD = exports.calculateHCF = exports.calculateGCD = exports.calculateFactorial = exports.calculateAverage = exports.verbalizer = exports.Verbalizer = exports.pluralizer = exports.Pluralizer = exports.VolumeConverter = exports.TimeConverter = exports.TemperatureConverter = exports.MassConverter = exports.LengthConverter = exports.DataConverter = exports.converter = exports.Converter = exports.AreaConverter = exports.wordCount = exports.parseNumbersFromText = exports.levenshteinDistance = exports.getLevenshteinDistance = exports.extractNumbersFromString = exports.extractNumbers = exports.countWordsInString = exports.countWords = exports.slugifyString = exports.reverseString = exports.replaceAllInString = exports.normalizeString = exports.maskString = exports.formatWithPlural = exports.formatUnitWithPlural = exports.formatNumberWithPluralUnit = exports.extractURLs = exports.extractEmails = exports.convertStringCase = exports.isSnakeCase = exports.isPascalCase = exports.isPalindrome = exports.isKebabCase = exports.isEmojiOnly = exports.isCamelCase = exports.generateAnagrams = exports.truncateString = exports.trimString = exports.generateRandomID = exports.capitalizeString = void 0;
3
+ exports.convertToDecimal = exports.calculateLCM = exports.calculateLCD = exports.calculateHCF = exports.calculateGCD = exports.calculateFactorial = exports.calculateAverage = exports.verbalizer = exports.Verbalizer = exports.pluralizer = exports.Pluralizer = exports.converter = exports.VolumeConverter = exports.TimeConverter = exports.TemperatureConverter = exports.MassConverter = exports.LengthConverter = exports.DataConverter = exports.Converter = exports.AreaConverter = exports.wordCount = exports.parseNumbersFromText = exports.levenshteinDistance = exports.getLevenshteinDistance = exports.extractNumbersFromString = exports.extractNumbers = exports.countWordsInString = exports.countWords = exports.slugifyString = exports.reverseString = exports.replaceAllInString = exports.normalizeString = exports.maskString = exports.formatWithPlural = exports.formatUnitWithPlural = exports.formatNumberWithPluralUnit = exports.extractURLs = exports.extractEmails = exports.convertStringCase = exports.isSnakeCase = exports.isPascalCase = exports.isPalindrome = exports.isKebabCase = exports.isEmojiOnly = exports.isCamelCase = exports.generateAnagrams = exports.truncateString = exports.trimString = exports.generateRandomID = exports.capitalizeString = void 0;
4
4
  exports.convertRomanToNumeric = exports.convertRomanToInteger = exports.convertRomanToArabic = exports.convertNumberToWordsOrdinal = exports.convertNumberToWords = exports.cardinalWordsToOrdinal = exports.arabicToRoman = exports.isPerfectSquare = exports.isPartOfFibonacciSeries = exports.isPartOfFibonacci = exports.isOddNumber = exports.isOdd = exports.isNumberInvalid = exports.isMultiple = exports.isInvalidNumber = exports.isFibonacci = exports.isEvenNumber = exports.isEven = exports.areNumbersInvalid = exports.areInvalidNumbers = exports.getNthFibonacci = exports.getMemoizedFibonacciSeries = exports.getMemoizedFibonacci = exports.getFibonacciSeriesMemo = exports.getFibonacciSeries = exports.getFibonacciNumbers = exports.getFibonacci = exports.generateFibonacci = exports.fibonacciGenerator = exports.calculatePercentage = exports.UnitConverter = exports.Unit = exports.Currency = exports.sumOfNumbers = exports.sumNumbers = exports.sumDigits = exports.roundToDecimal = exports.roundNumber = exports.reverseNumber = exports.getSumOfNumbers = exports.getRandomNumber = exports.getRandomInt = exports.getFactors = exports.getFactorial = exports.getDivisors = exports.getAverageOfNumbers = exports.getAverage = exports.factorsOf = exports.factorial = exports.convertToFixed = void 0;
5
- exports.convertHslToHex = exports.convertHslaToRgba = exports.convertHslaToHex8 = exports.convertHexToRgb = exports.convertHexToHsl = exports.convertHex8ToRgba = exports.convertHex8ToHsla = exports.convertColorCode = exports.getRandomHSL = exports.getRandomColor = exports.generateRandomHSLColor = exports.generateRandomHSL = exports.generateRandomColorInHexRGB = exports.generateRandomColor = exports.getColorForInitial = exports.getNumbersInRange = exports.roundToNearestInterval = exports.roundToNearest = exports.roundNumberToNearestInterval = exports.numberToOrdinal = exports.normalizeNumber = exports.getRandomFloat = exports.getRandomDecimal = exports.getOrdinalNumber = exports.getOrdinal = exports.formatCurrency = exports.convertToOrdinal = exports.convertNumberToOrdinal = exports.convertNumberToCurrency = exports.clampNumber = exports.cardinalToOrdinal = exports.isPrimeNumber = exports.isPrime = exports.getPrimeNumbers = exports.findPrimeNumbers = exports.wordToNumber = exports.wordsToNumber = exports.toRomanNumeral = exports.toRoman = exports.romanToNumeric = exports.romanToInteger = exports.romanToArabic = exports.numericToRoman = exports.numberToWordsOrdinal = exports.numberToWords = exports.numberToRoman = exports.integerToRoman = exports.convertWordToNumber = exports.convertWordsToNumber = exports.convertToRomanNumerals = void 0;
6
- exports.getTimeStringFromUTC = exports.getTimeFromMinutes = exports.getMinutesFromUTC = exports.getHourMinutesFromMinutes = exports.getCurrentTime = exports.getCurrentDateTime = exports.formatUTCOffset = exports.extractTotalMinutesFromTime = exports.extractTimeStringFromUTC = exports.extractTimeFromUTC = exports.extractMinutesFromUTC = exports.extractHourMinute = exports.convertMinutesToUTCOffset = exports.convertMinutesToTime = exports.convertMinutesToHourMinutes = exports.chronusts = exports.chronusjs = exports.chronus = exports.chronosts = exports.chronosjs = exports.chronos = exports.INTERNALS = exports.Chronus = exports.Chronos = exports.isValidTimeZoneId = exports.isValidUTCOffSet = exports.isValidUTC = exports.isValidTimeString = exports.isValidTime = exports.isLeapYear = exports.isDateLike = exports.greet = exports.getGreeting = exports.generateGreeting = exports.extractSolidColorValues = exports.extractAlphaColorValues = exports.Colour = exports.Color = exports.isRGBA = exports.isRGB = exports.isHSLA = exports.isHSL = exports.isHex8 = exports.isHex6 = exports.convertRgbToRgba = exports.convertRgbToHsl = exports.convertRgbToHex = exports.convertRgbaToHsla = exports.convertRgbaToHex8 = exports.convertHslToRgb = void 0;
7
- exports.isFileUpload = exports.isFileOrBlob = exports.isFileList = exports.isFileArray = exports.isCustomFileArray = exports.isCustomFile = exports.serializeForm = exports.parseFormData = exports.createFormData = exports.createControlledFormData = exports.convertIntoFormData = exports.naturalSortForString = exports.naturalSort = exports.compareSorter = exports.compareNaturally = exports.splitArrayByProperty = exports.splitArray = exports.rotateArray = exports.removeDuplicatesFromArray = exports.removeDuplicates = exports.moveArrayElement = exports.groupArrayByProperty = exports.getMissingElements = exports.getDuplicatesFromArray = exports.getDuplicates = exports.findMissingElements = exports.extractMissingElements = exports.extractDuplicatesFromArray = exports.extractDuplicates = exports.createOptionsArray = exports.sortAnArray = exports.Finder = exports.totalDeltaByField = exports.sumFieldDifference = exports.sumByField = exports.groupAndSumByField = exports.groupAndAvgByField = exports.groupAndAverageByField = exports.avgByField = exports.averageByField = exports.shuffleArray = exports.isValidEmptyArray = exports.isInvalidOrEmptyArray = exports.getLastArrayElement = exports.flattenArray = exports.filterArrayOfObjects = exports.minutesToUTCOffset = exports.getTotalMinutesFromUTC = exports.getTotalMinutesFromTime = exports.getTotalMinutes = void 0;
8
- exports.saveToLocalStorage = exports.removeFromSessionStorage = exports.removeFromLocalStorage = exports.getFromSessionStorage = exports.getFromLocalStorage = exports.toggleFullScreen = exports.smoothScrollTo = exports.copyToClipboard = exports.updateQueryParam = exports.queryStringToObject = exports.parseQueryStringLiteral = exports.parseQueryString = exports.literalQueryStringToObject = exports.getQueryStringAsObject = exports.getQueryParams = exports.generateQueryParams = exports.formatQueryParams = exports.createQueryParams = exports.removeObjectFields = exports.removeFields = exports.remapObjectFields = exports.remapFields = exports.pickObjectFieldsByCondition = exports.pickObjectFields = exports.pickFieldsByCondition = exports.pickFields = exports.omitObjectFields = exports.omitFields = exports.deleteObjectFields = exports.deleteFields = exports.convertObjectValues = exports.sanitizeData = exports.parseStringifiedObjectValues = exports.parseObjectValues = exports.parseJsonToObject = exports.mergeObjects = exports.mergeAndFlattenObjects = exports.flattenObjectKeyValue = exports.flattenObjectDotNotation = exports.extractUpdatedFields = exports.extractUpdatedAndNewFields = exports.extractNewFields = exports.extractObjectKeysDeep = exports.extractObjectKeys = exports.extractKeysDeep = exports.extractKeys = exports.countObjectFields = exports.cloneObject = exports.isValidFormData = exports.isOriginFileObj = void 0;
9
- exports.isObjectWithKeys = exports.isObjectEmpty = exports.isObject = exports.isNotEmptyObject = exports.isMethodDescriptor = exports.isMethod = exports.isMap = exports.isJSONObject = exports.isJSON = exports.isFunction = exports.isError = exports.isEmptyObjectGuard = exports.isEmptyObject = exports.isDate = exports.isArrayWithLength = exports.isArrayOfType = exports.isArray = exports.doesReturnPromise = exports.isUndefined = exports.isTruthy = exports.isSymbol = exports.isString = exports.isPrimitive = exports.isPositiveInteger = exports.isNumber = exports.isNull = exports.isNormalPrimitive = exports.isNonEmptyString = exports.isInteger = exports.isFalsy = exports.isBoolean = exports.isBigInt = exports.Paginator = exports.throttleAction = exports.parsePrimitivesDeep = exports.parseJsonDeep = exports.parseJSON = exports.joinArrayElements = exports.isDeepEqual = exports.getStaticMethodsCount = exports.getStaticMethodNames = exports.getInstanceMethodsCount = exports.getInstanceMethodNames = exports.getClassDetails = exports.deepParsePrimitives = exports.debounceAction = exports.countStaticMethods = exports.countInstanceMethods = exports.convertArrayToString = exports.saveToSessionStorage = void 0;
10
- exports.isValidURL = exports.isValidEmail = exports.isUUID = exports.isURL = exports.isPhoneNumber = exports.isNumericString = exports.isNodeEnvironment = exports.isNodeENV = exports.isNode = exports.isIPAddress = exports.isExpectedNodeENV = exports.isEnvironment = exports.isEmailArray = exports.isEmail = exports.isDateString = exports.isBrowser = exports.isBase64 = exports.httpStatus = exports.HttpStatus = exports.isValidSet = exports.isValidObject = exports.isValidMap = exports.isValidJSON = exports.isValidArray = exports.isSet = exports.isReturningPromise = exports.isRegularExpression = exports.isRegExp = exports.isPromise = void 0;
5
+ exports.convertHslaToHex8 = exports.convertHslToRgb = exports.convertHslToHex = exports.convertHexToRgb = exports.convertHexToHsl = exports.convertHex8ToRgba = exports.convertHex8ToHsla = exports.convertColorCode = exports.getRandomHSL = exports.getRandomColor = exports.generateRandomHSLColor = exports.generateRandomHSL = exports.generateRandomColorInHexRGB = exports.generateRandomColor = exports.getColorForInitial = exports.getNumbersInRange = exports.roundToNearestInterval = exports.roundToNearest = exports.roundNumberToNearestInterval = exports.numberToOrdinal = exports.normalizeNumber = exports.getRandomFloat = exports.getRandomDecimal = exports.getOrdinalNumber = exports.getOrdinal = exports.formatCurrency = exports.convertToOrdinal = exports.convertNumberToOrdinal = exports.convertNumberToCurrency = exports.clampNumber = exports.cardinalToOrdinal = exports.isPrimeNumber = exports.isPrime = exports.getPrimeNumbers = exports.findPrimeNumbers = exports.wordsToNumber = exports.wordToNumber = exports.toRomanNumeral = exports.toRoman = exports.romanToNumeric = exports.romanToInteger = exports.romanToArabic = exports.numericToRoman = exports.numberToWordsOrdinal = exports.numberToWords = exports.numberToRoman = exports.integerToRoman = exports.convertWordsToNumber = exports.convertWordToNumber = exports.convertToRomanNumerals = void 0;
6
+ exports.getTimeFromMinutes = exports.getMinutesFromUTC = exports.getHourMinutesFromMinutes = exports.getCurrentTime = exports.getCurrentDateTime = exports.formatUTCOffset = exports.extractTotalMinutesFromTime = exports.extractTimeStringFromUTC = exports.extractTimeFromUTC = exports.extractMinutesFromUTC = exports.extractHourMinute = exports.convertMinutesToUTCOffset = exports.convertMinutesToTime = exports.convertMinutesToHourMinutes = exports.chronusts = exports.chronusjs = exports.chronus = exports.chronosts = exports.chronosjs = exports.chronos = exports.INTERNALS = exports.Chronus = exports.Chronos = exports.isValidUTCOffSet = exports.isValidUTC = exports.isValidUTCOffset = exports.isValidTimeZoneId = exports.isValidTimeString = exports.isValidTime = exports.isLeapYear = exports.isDateLike = exports.greet = exports.getGreeting = exports.generateGreeting = exports.extractSolidColorValues = exports.extractAlphaColorValues = exports.Colour = exports.Color = exports.isRGBA = exports.isRGB = exports.isHex8 = exports.isHex6 = exports.isHSLA = exports.isHSL = exports.convertRgbaToHsla = exports.convertRgbaToHex8 = exports.convertRgbToRgba = exports.convertRgbToHsl = exports.convertRgbToHex = exports.convertHslaToRgba = void 0;
7
+ exports.isFileOrBlob = exports.isFileList = exports.isFileArray = exports.isCustomFileArray = exports.isCustomFile = exports.serializeForm = exports.parseFormData = exports.createFormData = exports.createControlledFormData = exports.convertIntoFormData = exports.naturalSortForString = exports.naturalSort = exports.compareSorter = exports.compareNaturally = exports.splitArrayByProperty = exports.splitArray = exports.rotateArray = exports.removeDuplicatesFromArray = exports.removeDuplicates = exports.moveArrayElement = exports.groupArrayByProperty = exports.getMissingElements = exports.getDuplicatesFromArray = exports.getDuplicates = exports.findMissingElements = exports.extractMissingElements = exports.extractDuplicatesFromArray = exports.extractDuplicates = exports.createOptionsArray = exports.sortAnArray = exports.Finder = exports.totalDeltaByField = exports.sumFieldDifference = exports.sumByField = exports.groupAndSumByField = exports.groupAndAvgByField = exports.groupAndAverageByField = exports.avgByField = exports.averageByField = exports.shuffleArray = exports.isValidEmptyArray = exports.isInvalidOrEmptyArray = exports.getLastArrayElement = exports.flattenArray = exports.filterArrayOfObjects = exports.minutesToUTCOffset = exports.getTotalMinutesFromUTC = exports.getTotalMinutesFromTime = exports.getTotalMinutes = exports.getTimeStringFromUTC = void 0;
8
+ exports.removeFromSessionStorage = exports.removeFromLocalStorage = exports.getFromSessionStorage = exports.getFromLocalStorage = exports.toggleFullScreen = exports.smoothScrollTo = exports.copyToClipboard = exports.updateQueryParam = exports.queryStringToObject = exports.parseQueryStringLiteral = exports.parseQueryString = exports.literalQueryStringToObject = exports.getQueryStringAsObject = exports.getQueryParams = exports.generateQueryParams = exports.formatQueryParams = exports.createQueryParams = exports.removeObjectFields = exports.removeFields = exports.remapObjectFields = exports.remapFields = exports.pickObjectFieldsByCondition = exports.pickObjectFields = exports.pickFieldsByCondition = exports.pickFields = exports.omitObjectFields = exports.omitFields = exports.deleteObjectFields = exports.deleteFields = exports.convertObjectValues = exports.sanitizeData = exports.parseStringifiedObjectValues = exports.parseObjectValues = exports.parseJsonToObject = exports.mergeObjects = exports.mergeAndFlattenObjects = exports.flattenObjectKeyValue = exports.flattenObjectDotNotation = exports.extractUpdatedFields = exports.extractUpdatedAndNewFields = exports.extractNewFields = exports.extractObjectKeysDeep = exports.extractObjectKeys = exports.extractKeysDeep = exports.extractKeys = exports.countObjectFields = exports.cloneObject = exports.isValidFormData = exports.isOriginFileObj = exports.isFileUpload = void 0;
9
+ exports.isObjectEmpty = exports.isObject = exports.isNotEmptyObject = exports.isMethodDescriptor = exports.isMethod = exports.isMap = exports.isJSONObject = exports.isJSON = exports.isFunction = exports.isError = exports.isEmptyObjectGuard = exports.isEmptyObject = exports.isDate = exports.isArrayWithLength = exports.isArrayOfType = exports.isArray = exports.doesReturnPromise = exports.isUndefined = exports.isTruthy = exports.isSymbol = exports.isString = exports.isPrimitive = exports.isPositiveInteger = exports.isNumber = exports.isNull = exports.isNormalPrimitive = exports.isNonEmptyString = exports.isInteger = exports.isFalsy = exports.isBoolean = exports.isBigInt = exports.Paginator = exports.throttleAction = exports.parsePrimitivesDeep = exports.parseJsonDeep = exports.parseJSON = exports.joinArrayElements = exports.isDeepEqual = exports.getStaticMethodsCount = exports.getStaticMethodNames = exports.getInstanceMethodsCount = exports.getInstanceMethodNames = exports.getClassDetails = exports.deepParsePrimitives = exports.debounceAction = exports.countStaticMethods = exports.countInstanceMethods = exports.convertArrayToString = exports.saveToSessionStorage = exports.saveToLocalStorage = void 0;
10
+ exports.isValidURL = exports.isValidEmail = exports.isUUID = exports.isURL = exports.isPhoneNumber = exports.isNumericString = exports.isNodeEnvironment = exports.isNodeENV = exports.isNode = exports.isIPAddress = exports.isExpectedNodeENV = exports.isEnvironment = exports.isEmailArray = exports.isEmail = exports.isDateString = exports.isBrowser = exports.isBase64 = exports.httpStatus = exports.HttpStatus = exports.isValidSet = exports.isValidObject = exports.isValidMap = exports.isValidJSON = exports.isValidArray = exports.isSet = exports.isReturningPromise = exports.isRegularExpression = exports.isRegExp = exports.isPromise = exports.isObjectWithKeys = void 0;
11
11
  var basics_1 = require("./string/basics");
12
12
  Object.defineProperty(exports, "capitalizeString", { enumerable: true, get: function () { return basics_1.capitalizeString; } });
13
13
  Object.defineProperty(exports, "generateRandomID", { enumerable: true, get: function () { return basics_1.generateRandomID; } });
@@ -47,13 +47,13 @@ Object.defineProperty(exports, "wordCount", { enumerable: true, get: function ()
47
47
  var Converter_1 = require("./converter/Converter");
48
48
  Object.defineProperty(exports, "AreaConverter", { enumerable: true, get: function () { return Converter_1.AreaConverter; } });
49
49
  Object.defineProperty(exports, "Converter", { enumerable: true, get: function () { return Converter_1.Converter; } });
50
- Object.defineProperty(exports, "converter", { enumerable: true, get: function () { return Converter_1.converter; } });
51
50
  Object.defineProperty(exports, "DataConverter", { enumerable: true, get: function () { return Converter_1.DataConverter; } });
52
51
  Object.defineProperty(exports, "LengthConverter", { enumerable: true, get: function () { return Converter_1.LengthConverter; } });
53
52
  Object.defineProperty(exports, "MassConverter", { enumerable: true, get: function () { return Converter_1.MassConverter; } });
54
53
  Object.defineProperty(exports, "TemperatureConverter", { enumerable: true, get: function () { return Converter_1.TemperatureConverter; } });
55
54
  Object.defineProperty(exports, "TimeConverter", { enumerable: true, get: function () { return Converter_1.TimeConverter; } });
56
55
  Object.defineProperty(exports, "VolumeConverter", { enumerable: true, get: function () { return Converter_1.VolumeConverter; } });
56
+ Object.defineProperty(exports, "converter", { enumerable: true, get: function () { return Converter_1.converter; } });
57
57
  var Pluralizer_1 = require("./pluralizer/Pluralizer");
58
58
  Object.defineProperty(exports, "Pluralizer", { enumerable: true, get: function () { return Pluralizer_1.Pluralizer; } });
59
59
  Object.defineProperty(exports, "pluralizer", { enumerable: true, get: function () { return Pluralizer_1.pluralizer; } });
@@ -125,8 +125,8 @@ Object.defineProperty(exports, "convertRomanToArabic", { enumerable: true, get:
125
125
  Object.defineProperty(exports, "convertRomanToInteger", { enumerable: true, get: function () { return convert_2.romanToInteger; } });
126
126
  Object.defineProperty(exports, "convertRomanToNumeric", { enumerable: true, get: function () { return convert_2.romanToInteger; } });
127
127
  Object.defineProperty(exports, "convertToRomanNumerals", { enumerable: true, get: function () { return convert_2.convertToRomanNumerals; } });
128
- Object.defineProperty(exports, "convertWordsToNumber", { enumerable: true, get: function () { return convert_2.wordsToNumber; } });
129
128
  Object.defineProperty(exports, "convertWordToNumber", { enumerable: true, get: function () { return convert_2.wordsToNumber; } });
129
+ Object.defineProperty(exports, "convertWordsToNumber", { enumerable: true, get: function () { return convert_2.wordsToNumber; } });
130
130
  Object.defineProperty(exports, "integerToRoman", { enumerable: true, get: function () { return convert_2.convertToRomanNumerals; } });
131
131
  Object.defineProperty(exports, "numberToRoman", { enumerable: true, get: function () { return convert_2.convertToRomanNumerals; } });
132
132
  Object.defineProperty(exports, "numberToWords", { enumerable: true, get: function () { return convert_2.numberToWords; } });
@@ -137,8 +137,8 @@ Object.defineProperty(exports, "romanToInteger", { enumerable: true, get: functi
137
137
  Object.defineProperty(exports, "romanToNumeric", { enumerable: true, get: function () { return convert_2.romanToInteger; } });
138
138
  Object.defineProperty(exports, "toRoman", { enumerable: true, get: function () { return convert_2.convertToRomanNumerals; } });
139
139
  Object.defineProperty(exports, "toRomanNumeral", { enumerable: true, get: function () { return convert_2.convertToRomanNumerals; } });
140
- Object.defineProperty(exports, "wordsToNumber", { enumerable: true, get: function () { return convert_2.wordsToNumber; } });
141
140
  Object.defineProperty(exports, "wordToNumber", { enumerable: true, get: function () { return convert_2.wordsToNumber; } });
141
+ Object.defineProperty(exports, "wordsToNumber", { enumerable: true, get: function () { return convert_2.wordsToNumber; } });
142
142
  var prime_1 = require("./number/prime");
143
143
  Object.defineProperty(exports, "findPrimeNumbers", { enumerable: true, get: function () { return prime_1.findPrimeNumbers; } });
144
144
  Object.defineProperty(exports, "getPrimeNumbers", { enumerable: true, get: function () { return prime_1.findPrimeNumbers; } });
@@ -177,20 +177,20 @@ Object.defineProperty(exports, "convertHex8ToHsla", { enumerable: true, get: fun
177
177
  Object.defineProperty(exports, "convertHex8ToRgba", { enumerable: true, get: function () { return convert_3.convertHex8ToRgba; } });
178
178
  Object.defineProperty(exports, "convertHexToHsl", { enumerable: true, get: function () { return convert_3.convertHexToHsl; } });
179
179
  Object.defineProperty(exports, "convertHexToRgb", { enumerable: true, get: function () { return convert_3.convertHexToRgb; } });
180
- Object.defineProperty(exports, "convertHslaToHex8", { enumerable: true, get: function () { return convert_3.convertHslaToHex8; } });
181
- Object.defineProperty(exports, "convertHslaToRgba", { enumerable: true, get: function () { return convert_3.convertHslaToRgba; } });
182
180
  Object.defineProperty(exports, "convertHslToHex", { enumerable: true, get: function () { return convert_3.convertHslToHex; } });
183
181
  Object.defineProperty(exports, "convertHslToRgb", { enumerable: true, get: function () { return convert_3.convertHslToRgb; } });
184
- Object.defineProperty(exports, "convertRgbaToHex8", { enumerable: true, get: function () { return convert_3.convertRgbaToHex8; } });
185
- Object.defineProperty(exports, "convertRgbaToHsla", { enumerable: true, get: function () { return convert_3.convertRgbaToHsla; } });
182
+ Object.defineProperty(exports, "convertHslaToHex8", { enumerable: true, get: function () { return convert_3.convertHslaToHex8; } });
183
+ Object.defineProperty(exports, "convertHslaToRgba", { enumerable: true, get: function () { return convert_3.convertHslaToRgba; } });
186
184
  Object.defineProperty(exports, "convertRgbToHex", { enumerable: true, get: function () { return convert_3.convertRgbToHex; } });
187
185
  Object.defineProperty(exports, "convertRgbToHsl", { enumerable: true, get: function () { return convert_3.convertRgbToHsl; } });
188
186
  Object.defineProperty(exports, "convertRgbToRgba", { enumerable: true, get: function () { return convert_3.convertRgbToRgba; } });
187
+ Object.defineProperty(exports, "convertRgbaToHex8", { enumerable: true, get: function () { return convert_3.convertRgbaToHex8; } });
188
+ Object.defineProperty(exports, "convertRgbaToHsla", { enumerable: true, get: function () { return convert_3.convertRgbaToHsla; } });
189
189
  var helpers_1 = require("./colors/helpers");
190
- Object.defineProperty(exports, "isHex6", { enumerable: true, get: function () { return helpers_1._isHex6; } });
191
- Object.defineProperty(exports, "isHex8", { enumerable: true, get: function () { return helpers_1._isHex8; } });
192
190
  Object.defineProperty(exports, "isHSL", { enumerable: true, get: function () { return helpers_1._isHSL; } });
193
191
  Object.defineProperty(exports, "isHSLA", { enumerable: true, get: function () { return helpers_1._isHSLA; } });
192
+ Object.defineProperty(exports, "isHex6", { enumerable: true, get: function () { return helpers_1._isHex6; } });
193
+ Object.defineProperty(exports, "isHex8", { enumerable: true, get: function () { return helpers_1._isHex8; } });
194
194
  Object.defineProperty(exports, "isRGB", { enumerable: true, get: function () { return helpers_1._isRGB; } });
195
195
  Object.defineProperty(exports, "isRGBA", { enumerable: true, get: function () { return helpers_1._isRGBA; } });
196
196
  var Color_1 = require("./colors/Color");
@@ -208,9 +208,10 @@ Object.defineProperty(exports, "isDateLike", { enumerable: true, get: function (
208
208
  Object.defineProperty(exports, "isLeapYear", { enumerable: true, get: function () { return guards_3.isLeapYear; } });
209
209
  Object.defineProperty(exports, "isValidTime", { enumerable: true, get: function () { return guards_3.isValidTime; } });
210
210
  Object.defineProperty(exports, "isValidTimeString", { enumerable: true, get: function () { return guards_3.isValidTime; } });
211
- Object.defineProperty(exports, "isValidUTC", { enumerable: true, get: function () { return guards_3.isValidUTCOffSet; } });
212
- Object.defineProperty(exports, "isValidUTCOffSet", { enumerable: true, get: function () { return guards_3.isValidUTCOffSet; } });
213
211
  Object.defineProperty(exports, "isValidTimeZoneId", { enumerable: true, get: function () { return guards_3.isValidTimeZoneId; } });
212
+ Object.defineProperty(exports, "isValidUTCOffset", { enumerable: true, get: function () { return guards_3.isValidUTCOffset; } });
213
+ Object.defineProperty(exports, "isValidUTC", { enumerable: true, get: function () { return guards_3.isValidUTCOffset; } });
214
+ Object.defineProperty(exports, "isValidUTCOffSet", { enumerable: true, get: function () { return guards_3.isValidUTCOffset; } });
214
215
  var Chronos_1 = require("./date/Chronos");
215
216
  Object.defineProperty(exports, "Chronos", { enumerable: true, get: function () { return Chronos_1.Chronos; } });
216
217
  Object.defineProperty(exports, "Chronus", { enumerable: true, get: function () { return Chronos_1.Chronos; } });
@@ -1,7 +1,7 @@
1
1
  import type { Enumerate, NumberRange } from '../number/types';
2
2
  import type { LooseLiteral, TupleOf } from '../utils/types';
3
3
  import { INTERNALS } from './constants';
4
- import type { $UTCOffset, ChronosInput, ChronosInternals, ChronosMethods, ChronosObject, ChronosPlugin, ChronosWithOptions, DateRangeOptions, DateTimeFormatOptions, FormatOptions, LocalesArguments, Milliseconds, MonthName, Quarter, RangeWithDates, RelativeDateRange, RelativeRangeOptions, StrictFormat, TimeParts, TimeUnit, TimeZone, TimeZoneId, TimeZoneIdentifier, TimeZoneName, UTCOffset, WeekDay } from './types';
4
+ import type { $UTCOffset, ChronosInput, ChronosInternals, ChronosMethods, ChronosObject, ChronosPlugin, ChronosWithOptions, DateRangeOptions, DateTimeFormatOptions, FormatOptions, LocalesArguments, Milliseconds, MonthName, Quarter, RangeWithDates, RelativeDateRange, RelativeRangeOptions, StrictFormat, TimeParts, TimeUnit, TimeUnitValue, TimeZone, TimeZoneId, TimeZoneIdentifier, TimeZoneName, UTCOffset, WeekDay } from './types';
5
5
  /**
6
6
  * * Creates a new immutable `Chronos` instance.
7
7
  *
@@ -17,7 +17,7 @@ import type { $UTCOffset, ChronosInput, ChronosInternals, ChronosMethods, Chrono
17
17
  * **It also accepts number values as following:**
18
18
  * - **`year, month, date, hours, minutes, seconds, milliseconds`**: Individual components of a date-time to construct a `Chronos` instance.
19
19
  * - **`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.
20
- * - **`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).
20
+ * - **`month`**: A number between 1 and 12 representing the month (1 for January, 12 for December).
21
21
  * - **`date`**: A number between 1 and 31 representing the day of the month.
22
22
  * - **`hours`**: A number between 0 and 23 representing the hour of the day.
23
23
  * - **`minutes`**: A number between 0 and 59 representing the minutes past the hour.
@@ -198,19 +198,19 @@ export declare class Chronos {
198
198
  get lastDateOfMonth(): NumberRange<28, 31>;
199
199
  /** @instance Returns a debug-friendly string for `console.log` or `util.inspect`. */
200
200
  inspect(): string;
201
- /** @instance Enables JSON.stringify and logging in the console (in Browser environment) to show readable output. */
201
+ /** @instance Enables `JSON.stringify` to show readable output. Calls {@link toLocalISOString} method. */
202
202
  toJSON(): string;
203
- /** @instance Enables arithmetic and comparison operations (e.g., +new Chronos()). */
203
+ /** @instance Enables arithmetic and comparison operations (e.g., `+new Chronos()`). Calls {@link getTimeStamp} method. */
204
204
  valueOf(): number;
205
- /** @instance Clones and returns a new `Chronos` instance with the same date. */
205
+ /** @instance Clones and returns exactly same `Chronos` instance. */
206
206
  clone(): Chronos;
207
- /** @instance Gets the native `Date` instance (read-only). */
207
+ /** @instance Gets the native `Date` instance of the current `Chronos`. */
208
208
  toDate(): Date;
209
209
  /** @instance Returns a string representation of a date. */
210
210
  toString(): string;
211
211
  /** @instance Returns ISO string with local machine's timezone offset. */
212
212
  toLocalISOString(): string;
213
- /** @instance Returns a date as a string value in ISO format. Respects timezone. */
213
+ /** @instance Returns a date as a string value in ISO format. Respects timezone UTC. */
214
214
  toISOString(): string;
215
215
  /**
216
216
  * @instance Wrapper over native `toLocaleString` with improved type system.
@@ -320,11 +320,11 @@ export declare class Chronos {
320
320
  * @returns `true` if the year is a leap year, `false` otherwise.
321
321
  */
322
322
  isLeapYear(year?: number): boolean;
323
- /** @instance Checks if another date is exactly equal to this one */
323
+ /** @instance Checks if another date is exactly equal to this one. */
324
324
  isEqual(other: ChronosInput): boolean;
325
- /** @instance Checks if another date is exactly equal to or before this one */
325
+ /** @instance Checks if another date is exactly equal to or before this one. */
326
326
  isEqualOrBefore(other: ChronosInput): boolean;
327
- /** @instance Checks if another date is exactly equal to or after this one */
327
+ /** @instance Checks if another date is exactly equal to or after this one. */
328
328
  isEqualOrAfter(other: ChronosInput): boolean;
329
329
  /**
330
330
  * @instance Checks if another date is the same as this one in a specific unit.
@@ -377,7 +377,7 @@ export declare class Chronos {
377
377
  isBetween(start: ChronosInput, end: ChronosInput, inclusive?: '[]' | '[)' | '(]' | '()'): boolean;
378
378
  /**
379
379
  * @instance Checks if the date is within daylight saving time (DST).
380
- * @returns Whether the date is in DST.
380
+ * @returns Whether the date is in DST (`true` or `false`).
381
381
  */
382
382
  isDST(): boolean;
383
383
  /** @instance Checks if current day is the first day of the current month. */
@@ -419,14 +419,15 @@ export declare class Chronos {
419
419
  get(unit: TimeUnit): number;
420
420
  /**
421
421
  * @instance Returns a new `Chronos` instance with the specified unit set to the given value.
422
- * @param unit The unit to modify.
423
- * @param value The value to set for the unit.
422
+ * @param unit The unit to modify. Type of `value` is determined by `unit`.
423
+ * @param value The value to set for the unit. Type of `value` is determined by `unit`.
424
424
  */
425
- set(unit: TimeUnit, value: number): Chronos;
425
+ set<Unit extends TimeUnit>(unit: Unit, value: TimeUnitValue<Unit>): Chronos;
426
426
  /**
427
- * @instance Returns the difference between this and another date in the given unit.
427
+ * @instance Returns the difference between current and another date in the given unit.
428
428
  * @param other The other date to compare.
429
429
  * @param unit The unit in which to return the difference.
430
+ * @returns Difference in number (either `integer` or `float`).
430
431
  */
431
432
  diff(other: ChronosInput, unit: TimeUnit): number;
432
433
  /**
@@ -447,7 +448,7 @@ export declare class Chronos {
447
448
  /**
448
449
  * @instance Calculates the ISO 8601 week number of the year.
449
450
  *
450
- * ISO weeks start on Monday, and the first week of the year is the one containing January 4th.
451
+ * @Remarks ISO weeks start on Monday, and the first week of the year is the one containing January 4th.
451
452
  *
452
453
  * @returns Week number (1–53).
453
454
  */
@@ -488,7 +489,7 @@ export declare class Chronos {
488
489
  * - `Q3`: July to September
489
490
  * - `Q4`: October to December
490
491
  *
491
- * This method strictly uses the **calendar year**. For fiscal quarters, use `toFiscalQuarter()` instead.
492
+ * This method strictly uses the **calendar year**. For fiscal quarters, use {@link toFiscalQuarter} instead.
492
493
  *
493
494
  * @example
494
495
  * new Chronos('2025-02-14').toQuarter(); // 1
@@ -751,12 +752,12 @@ export declare class Chronos {
751
752
  */
752
753
  static getDatesForDay(day: WeekDay, options?: DateRangeOptions): string[];
753
754
  /**
754
- * @static Returns earliest Chronos
755
+ * @static Returns earliest Chronos.
755
756
  * @param dates Date inputs.
756
757
  */
757
758
  static min(...dates: ChronosInput[]): Chronos;
758
759
  /**
759
- * @static Returns latest Chronos
760
+ * @static Returns latest Chronos.
760
761
  * @param dates Date inputs.
761
762
  */
762
763
  static max(...dates: ChronosInput[]): Chronos;
@@ -13,7 +13,7 @@ export declare function isValidTime(value: unknown): value is ClockTime;
13
13
  * @param value - The value to check.
14
14
  * @returns `true` if the value is a valid utc offset, `false` otherwise.
15
15
  */
16
- export declare function isValidUTCOffSet(value: unknown): value is UTCOffset;
16
+ export declare function isValidUTCOffset(value: unknown): value is UTCOffset;
17
17
  /**
18
18
  * * Checks if the provided value is a valid timezone identifier from {@link https://en.wikipedia.org/wiki/List_of_tz_database_time_zones IANA TZ Database} (e.g. `"Africa/Harare"`).
19
19
  * @param value Timezone id to check.
@@ -107,13 +107,13 @@ declare module '../Chronos' {
107
107
  */
108
108
  isBusinessHour(options?: BusinessOptionsWeekends): boolean;
109
109
  /**
110
- * @instance Returns the academic year based on a typical start in July and end in June.
110
+ * @instance Returns the academic year based on a typical start in `July` and end in `June`.
111
111
  * @returns The academic year in format `YYYY-YYYY`.
112
112
  */
113
113
  toAcademicYear(): AcademicYear;
114
114
  /**
115
115
  * @instance Returns the fiscal quarter based on custom fiscal year start (defaults to July).
116
- * @param startMonth - The fiscal year start month (1-12), default is July (7).
116
+ * @param startMonth - The fiscal year start month (1-12), default is July (`7`).
117
117
  * @returns The fiscal quarter (1-4).
118
118
  */
119
119
  toFiscalQuarter(startMonth?: NumberRange<1, 12>): Quarter;
@@ -4,6 +4,9 @@ declare module '../Chronos' {
4
4
  interface Chronos {
5
5
  /**
6
6
  * @instance Returns the full time duration breakdown between current input (start) and another time (to) as {@link TimeDuration} object.
7
+ *
8
+ * @remarks This method calculates the elapsed time difference (excludes the end day), if you need an inclusive calendar-style difference (counting both start and end days), adjust one day manually before calling `duration()`.
9
+ *
7
10
  * @param toTime The time to compare with. Defaults to `now`.
8
11
  * @param absolute If true, returns all values as positive numbers. Defaults to `true`.
9
12
  * @returns An object of time units: `years`, `months`, `days`, `hours`, `minutes`, `seconds`, `milliseconds` ({@link TimeDuration}).
@@ -11,6 +14,9 @@ declare module '../Chronos' {
11
14
  duration(toTime?: ChronosInput, absolute?: boolean): TimeDuration;
12
15
  /**
13
16
  * @instance Returns a human-readable formatted duration string between the current instance (start) and another time (to).
17
+ *
18
+ * @remarks This method calculates the elapsed time difference (excludes the end day), if you need an inclusive calendar-style difference (counting both start and end days), adjust one day manually before calling `durationString()`.
19
+ *
14
20
  * @param options {@link DurationOptions} to format duration string, including the time to compare with.
15
21
  * @returns A formatted duration string, e.g. `"2 hours, 5 minutes"` or `"2h 5m"`.
16
22
  */
@@ -34,23 +34,20 @@ declare module '../Chronos' {
34
34
  /**
35
35
  * @instance Returns the current time zone name as a full descriptive string (e.g. `"Bangladesh Standard Time"`).
36
36
  *
37
- * @param utc Optional UTC offset in `"UTC+06:00"` format. When passed, it bypasses the current time zone offset.
38
- * @returns Time zone name in full descriptive string or UTC offset if it is not a valid time zone.
39
- *
40
37
  * @remarks
41
38
  * - This method uses a predefined mapping of UTC offsets to time zone names.
42
39
  * - If multiple time zones share the same UTC offset, it returns the **first match** from the predefined list.
43
40
  * - If no match is found (which is rare), it falls back to returning the UTC offset (e.g. `"UTC+06:00"`).
44
41
  * - To retrieve the local system's native time zone name (or its identifier if the name is unavailable), use the {@link $getNativeTimeZone} instance method.
45
42
  * - To retrieve the local system's native time zone identifier, use the {@link $getNativeTimeZoneId} instance method.
43
+ *
44
+ * @param utc Optional UTC offset in `"UTC+06:00"` format. When passed, it bypasses the current time zone offset.
45
+ * @returns Time zone name in full descriptive string or UTC offset if it is not a valid time zone.
46
46
  */
47
47
  getTimeZoneName(utc?: UTCOffset): LooseLiteral<TimeZoneName | UTCOffset>;
48
48
  /**
49
49
  * @instance Returns the current time zone abbreviation (e.g. `"BST"` for `Bangladesh Standard Time`).
50
50
  *
51
- * @param utc Optional UTC offset in `"UTC+06:00"` format. When passed, it bypasses the current time zone offset.
52
- * @returns Time zone name in full descriptive string or UTC offset if it is not a valid time zone.
53
- *
54
51
  * @remarks
55
52
  * - This method uses a predefined mapping of UTC offsets to abbreviated time zone codes.
56
53
  * - If multiple time zones share the same UTC offset, it returns the **first abbreviation** from the list.
@@ -58,8 +55,20 @@ declare module '../Chronos' {
58
55
  * - If no match is found (for unlisted or fictional utc offset), it returns the UTC offset (e.g. `"UTC+06:00"`).
59
56
  * - To retrieve the local system's native time zone name (or its identifier if the name is unavailable), use the {@link $getNativeTimeZone} instance method.
60
57
  * - To retrieve the local system's native time zone identifier, use the {@link $getNativeTimeZoneId} instance method.
58
+ *
59
+ * @param utc Optional UTC offset in `"UTC+06:00"` format. When passed, it bypasses the current time zone offset.
60
+ * @returns Time zone name in full descriptive string or UTC offset if it is not a valid time zone.
61
61
  */
62
62
  getTimeZoneNameShort(utc?: UTCOffset): LooseLiteral<TimeZone | UTCOffset>;
63
+ /**
64
+ * @instance Returns the current time zone abbreviation (e.g. `"BST"` for `Bangladesh Standard Time`).
65
+ *
66
+ * @remarks This method is an alias for {@link getTimeZoneNameShort}.
67
+ *
68
+ * @param utc Optional UTC offset in `"UTC+06:00"` format. When passed, it bypasses the current time zone offset.
69
+ * @returns Time zone name in full descriptive string or UTC offset if it is not a valid time zone.
70
+ */
71
+ getTimeZoneNameAbbr(utc?: UTCOffset): LooseLiteral<TimeZone | UTCOffset>;
63
72
  }
64
73
  }
65
74
  /** * Plugin to inject `timeZone` related methods */
@@ -249,7 +249,7 @@ export declare const TIME_ZONES: Readonly<{
249
249
  readonly offset: "UTC+07:00";
250
250
  };
251
251
  readonly DDUT: {
252
- readonly tzName: "Dumont d'Urville Time (in French Antarctic Station)";
252
+ readonly tzName: "Dumont d'Urville Time (Antarctic Station in French)";
253
253
  readonly offset: "UTC+10:00";
254
254
  };
255
255
  readonly DFT: {
@@ -397,7 +397,7 @@ export declare const TIME_ZONES: Readonly<{
397
397
  readonly offset: "UTC+07:00";
398
398
  };
399
399
  readonly IDLW: {
400
- readonly tzName: "International Date Line West time zone";
400
+ readonly tzName: "International Date Line West";
401
401
  readonly offset: "UTC-12:00";
402
402
  };
403
403
  readonly IDT: {
@@ -891,7 +891,7 @@ export declare const TIME_ZONE_LABELS: Readonly<{
891
891
  readonly 'UTC+10:30': "Lord Howe Standard Time";
892
892
  readonly 'UTC+11:00': "Central Pacific Standard Time";
893
893
  readonly 'UTC+12:00': "New Zealand Standard Time";
894
- readonly 'UTC+12:45': "Chatham Islands Time";
894
+ readonly 'UTC+12:45': "Chatham Standard Time";
895
895
  readonly 'UTC+13:00': "Phoenix Island Time";
896
896
  readonly 'UTC+14:00': "Line Islands Time";
897
897
  }>;
@@ -47,10 +47,12 @@ export interface GreetingConfigs {
47
47
  /** Default greeting message if no period matches. */
48
48
  defaultMessage?: string;
49
49
  }
50
- /** Name of time unit from year to millisecond */
50
+ /** Name of time unit from `year` to `millisecond` */
51
51
  export type TimeUnit = 'year' | 'month' | 'day' | 'week' | 'hour' | 'minute' | 'second' | 'millisecond';
52
52
  /** Name of time unit from `year` to `millisecond`, except `week` */
53
53
  export type FromNowUnit = Exclude<TimeUnit, 'week'>;
54
+ /** Conditional value for {@link TimeUnit} */
55
+ export type TimeUnitValue<Unit extends TimeUnit> = Unit extends 'month' ? NumberRange<1, 12> : Unit extends 'week' ? NumberRange<1, 53> : Unit extends 'day' ? NumberRange<1, 31> : Unit extends 'hour' ? Enumerate<24> : Unit extends 'minute' | 'second' ? Enumerate<60> : Unit extends 'millisecond' ? Milliseconds : number;
54
56
  /** Year in either 4 or 2 digits format */
55
57
  export type Year = (typeof YEAR_FORMATS)[number];
56
58
  /** Month in either 1 or 2 digits or 3 letters or full word format */
@@ -212,6 +214,7 @@ export type ChronosMethods = $InstanceMethods | $StaticMethods | $PluginMethods;
212
214
  export type ChronosInput = number | string | Date | Chronos;
213
215
  /** Represents key of `ChronosStatics` (each static method and property) */
214
216
  export type ChronosStaticKey = keyof ChronosStatics;
217
+ /** Key of {@link TIME_ZONE_LABELS} ({@link UTCOffset}) */
215
218
  export type $TZLabelKey = keyof typeof TIME_ZONE_LABELS;
216
219
  /** Abbreviated time-zone names (from {@link https://en.wikipedia.org/wiki/List_of_time_zone_abbreviations time zone abbreviations on Wikipedia}) */
217
220
  export type TimeZone = keyof typeof TIME_ZONES;
@@ -19,7 +19,7 @@ export { isCamelCase, isEmojiOnly, isKebabCase, isPalindrome, isPascalCase, isSn
19
19
  export { convertStringCase } from './string/case';
20
20
  export { extractEmails, extractURLs, formatUnitWithPlural as formatNumberWithPluralUnit, formatUnitWithPlural, formatUnitWithPlural as formatWithPlural, maskString, normalizeString, replaceAllInString, reverseString, slugifyString, } from './string/convert';
21
21
  export { countWords, countWords as countWordsInString, extractNumbersFromString as extractNumbers, extractNumbersFromString, getLevenshteinDistance, getLevenshteinDistance as levenshteinDistance, extractNumbersFromString as parseNumbersFromText, countWords as wordCount, } from './string/utilities';
22
- export { AreaConverter, Converter, converter, DataConverter, LengthConverter, MassConverter, TemperatureConverter, TimeConverter, VolumeConverter, } from './converter/Converter';
22
+ export { AreaConverter, Converter, DataConverter, LengthConverter, MassConverter, TemperatureConverter, TimeConverter, VolumeConverter, converter, } from './converter/Converter';
23
23
  export { Pluralizer, pluralizer } from './pluralizer/Pluralizer';
24
24
  export { Verbalizer, verbalizer } from './verbalizer/Verbalizer';
25
25
  export { getAverage as calculateAverage, factorial as calculateFactorial, calculateHCF as calculateGCD, calculateHCF, calculateLCM as calculateLCD, calculateLCM, convertToDecimal, convertToDecimal as convertToFixed, factorial, getFactors as factorsOf, getAverage, getAverage as getAverageOfNumbers, getFactors as getDivisors, factorial as getFactorial, getFactors, getRandomNumber as getRandomInt, getRandomNumber, sumNumbers as getSumOfNumbers, reverseNumber, roundNumber, roundNumber as roundToDecimal, sumDigits, sumNumbers, sumNumbers as sumOfNumbers, } from './number/basics';
@@ -28,18 +28,18 @@ export { Unit, Unit as UnitConverter } from './number/Unit';
28
28
  export { calculatePercentage } from './number/percent';
29
29
  export { fibonacciGenerator, fibonacciGenerator as generateFibonacci, getFibonacciSeries as getFibonacci, getFibonacciSeries as getFibonacciNumbers, getFibonacciSeries, getFibonacciSeriesMemo, getFibonacciSeriesMemo as getMemoizedFibonacci, getFibonacciSeriesMemo as getMemoizedFibonacciSeries, getNthFibonacci, } from './number/fibonacci';
30
30
  export { areInvalidNumbers, areInvalidNumbers as areNumbersInvalid, isEven, isEven as isEvenNumber, isFibonacci, areInvalidNumbers as isInvalidNumber, isMultiple, areInvalidNumbers as isNumberInvalid, isOdd, isOdd as isOddNumber, isFibonacci as isPartOfFibonacci, isFibonacci as isPartOfFibonacciSeries, isPerfectSquare, } from './number/guards';
31
- export { convertToRomanNumerals as arabicToRoman, numberToWordsOrdinal as cardinalWordsToOrdinal, numberToWords as convertNumberToWords, numberToWordsOrdinal as convertNumberToWordsOrdinal, romanToInteger as convertRomanToArabic, romanToInteger as convertRomanToInteger, romanToInteger as convertRomanToNumeric, convertToRomanNumerals, wordsToNumber as convertWordsToNumber, wordsToNumber as convertWordToNumber, convertToRomanNumerals as integerToRoman, convertToRomanNumerals as numberToRoman, numberToWords, numberToWordsOrdinal, convertToRomanNumerals as numericToRoman, romanToInteger as romanToArabic, romanToInteger, romanToInteger as romanToNumeric, convertToRomanNumerals as toRoman, convertToRomanNumerals as toRomanNumeral, wordsToNumber, wordsToNumber as wordToNumber, } from './number/convert';
31
+ export { convertToRomanNumerals as arabicToRoman, numberToWordsOrdinal as cardinalWordsToOrdinal, numberToWords as convertNumberToWords, numberToWordsOrdinal as convertNumberToWordsOrdinal, romanToInteger as convertRomanToArabic, romanToInteger as convertRomanToInteger, romanToInteger as convertRomanToNumeric, convertToRomanNumerals, wordsToNumber as convertWordToNumber, wordsToNumber as convertWordsToNumber, convertToRomanNumerals as integerToRoman, convertToRomanNumerals as numberToRoman, numberToWords, numberToWordsOrdinal, convertToRomanNumerals as numericToRoman, romanToInteger as romanToArabic, romanToInteger, romanToInteger as romanToNumeric, convertToRomanNumerals as toRoman, convertToRomanNumerals as toRomanNumeral, wordsToNumber as wordToNumber, wordsToNumber, } from './number/convert';
32
32
  export { findPrimeNumbers, findPrimeNumbers as getPrimeNumbers, isPrime, isPrime as isPrimeNumber, } from './number/prime';
33
33
  export { getOrdinal as cardinalToOrdinal, clampNumber, formatCurrency as convertNumberToCurrency, getOrdinal as convertNumberToOrdinal, getOrdinal as convertToOrdinal, formatCurrency, getOrdinal, getOrdinal as getOrdinalNumber, getRandomFloat as getRandomDecimal, getRandomFloat, normalizeNumber, getOrdinal as numberToOrdinal, roundToNearest as roundNumberToNearestInterval, roundToNearest, roundToNearest as roundToNearestInterval, } from './number/utilities';
34
34
  export { getNumbersInRange } from './number/range';
35
35
  export { getColorForInitial } from './colors/initials';
36
36
  export { generateRandomColor, generateRandomColorInHexRGB, generateRandomHSLColor as generateRandomHSL, generateRandomHSLColor, generateRandomColor as getRandomColor, generateRandomHSLColor as getRandomHSL, } from './colors/random';
37
- export { convertColorCode, convertHex8ToHsla, convertHex8ToRgba, convertHexToHsl, convertHexToRgb, convertHslaToHex8, convertHslaToRgba, convertHslToHex, convertHslToRgb, convertRgbaToHex8, convertRgbaToHsla, convertRgbToHex, convertRgbToHsl, convertRgbToRgba, } from './colors/convert';
38
- export { _isHex6 as isHex6, _isHex8 as isHex8, _isHSL as isHSL, _isHSLA as isHSLA, _isRGB as isRGB, _isRGBA as isRGBA, } from './colors/helpers';
37
+ export { convertColorCode, convertHex8ToHsla, convertHex8ToRgba, convertHexToHsl, convertHexToRgb, convertHslToHex, convertHslToRgb, convertHslaToHex8, convertHslaToRgba, convertRgbToHex, convertRgbToHsl, convertRgbToRgba, convertRgbaToHex8, convertRgbaToHsla, } from './colors/convert';
38
+ export { _isHSL as isHSL, _isHSLA as isHSLA, _isHex6 as isHex6, _isHex8 as isHex8, _isRGB as isRGB, _isRGBA as isRGBA, } from './colors/helpers';
39
39
  export { Color, Color as Colour } from './colors/Color';
40
40
  export { extractAlphaColorValues, extractSolidColorValues } from './colors/utils';
41
41
  export { getGreeting as generateGreeting, getGreeting, getGreeting as greet, } from './date/greet';
42
- export { isDateLike, isLeapYear, isValidTime, isValidTime as isValidTimeString, isValidUTCOffSet as isValidUTC, isValidUTCOffSet, isValidTimeZoneId, } from './date/guards';
42
+ export { isDateLike, isLeapYear, isValidTime, isValidTime as isValidTimeString, isValidTimeZoneId, isValidUTCOffset, isValidUTCOffset as isValidUTC, isValidUTCOffset as isValidUTCOffSet, } from './date/guards';
43
43
  export { Chronos, Chronos as Chronus } from './date/Chronos';
44
44
  export { INTERNALS } from './date/constants';
45
45
  export { chronos, chronos as chronosjs, chronos as chronosts, chronos as chronus, chronos as chronusjs, chronos as chronusts, } from './date/chronos-fn';
@@ -78,9 +78,9 @@ export class Chronos {
78
78
  case 'timeZone':
79
79
  case 'toUTC':
80
80
  case 'utc':
81
- return string.replace(this.#isoTzRemoved(), replacement);
81
+ return string.replace(this.#removeUTCFromISO(), replacement);
82
82
  default:
83
- return string.replace(this.#isoTzRemoved(true), replacement);
83
+ return string.replace(this.#removeUTCFromISO(true), replacement);
84
84
  }
85
85
  }
86
86
  [Symbol.search](string) {
@@ -88,9 +88,9 @@ export class Chronos {
88
88
  case 'timeZone':
89
89
  case 'toUTC':
90
90
  case 'utc':
91
- return string.indexOf(this.#isoTzRemoved());
91
+ return string.indexOf(this.#removeUTCFromISO());
92
92
  default:
93
- return string.indexOf(this.#isoTzRemoved(true));
93
+ return string.indexOf(this.#removeUTCFromISO(true));
94
94
  }
95
95
  }
96
96
  [Symbol.split](string) {
@@ -98,9 +98,9 @@ export class Chronos {
98
98
  case 'timeZone':
99
99
  case 'toUTC':
100
100
  case 'utc':
101
- return string.split(this.#isoTzRemoved());
101
+ return string.split(this.#removeUTCFromISO());
102
102
  default:
103
- return string.split(this.#isoTzRemoved(true));
103
+ return string.split(this.#removeUTCFromISO(true));
104
104
  }
105
105
  }
106
106
  [Symbol.match](string) {
@@ -226,7 +226,7 @@ export class Chronos {
226
226
  const pad = (n, p = 2) => String(n).padStart(p, '0');
227
227
  return `${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()}`;
228
228
  }
229
- #isoTzRemoved(local = false) {
229
+ #removeUTCFromISO(local = false) {
230
230
  return local ?
231
231
  this.toLocalISOString().replace(/\.\d+(Z|[+-]\d{2}:\d{2})?$/, '')
232
232
  : this.toISOString().replace(/\.\d+(Z|[+-]\d{2}:\d{2})?$/, '');
@@ -281,7 +281,7 @@ export class Chronos {
281
281
  return this.getTimeStamp();
282
282
  }
283
283
  clone() {
284
- return new _a(this.#date).#withOrigin(this.#ORIGIN);
284
+ return new _a(this.#date).#withOrigin(this.#ORIGIN, this.#offset, this.timeZoneName, this.timeZoneId, this.$tzTracker);
285
285
  }
286
286
  toDate() {
287
287
  switch (this.#ORIGIN) {
@@ -446,7 +446,7 @@ export class Chronos {
446
446
  }
447
447
  }
448
448
  isDST() {
449
- const year = this.#date.getFullYear();
449
+ const year = this.year;
450
450
  const jan = new Date(year, 0, 1).getTimezoneOffset();
451
451
  const jul = new Date(year, 6, 1).getTimezoneOffset();
452
452
  return this.#date.getTimezoneOffset() < Math.max(jan, jul);
@@ -570,7 +570,7 @@ export class Chronos {
570
570
  d.setFullYear(value);
571
571
  break;
572
572
  case 'month':
573
- d.setMonth(value);
573
+ d.setMonth(value - 1);
574
574
  break;
575
575
  case 'day':
576
576
  d.setDate(value);
@@ -608,11 +608,16 @@ export class Chronos {
608
608
  return msDiff / 8.64e7;
609
609
  case 'week':
610
610
  return msDiff / 6.048e8;
611
- case 'month':
612
- return ((this.get('year') - time.get('year')) * 12 +
613
- (this.get('month') - time.get('month')));
611
+ case 'month': {
612
+ const yearDiff = this.get('year') - time.get('year');
613
+ const monthDiff = this.get('month') - time.get('month');
614
+ const totalMonthDiff = yearDiff * 12 + monthDiff;
615
+ const dayDiff = this.get('day') - time.get('day');
616
+ const daysInMonth = new Date(this.get('year'), this.get('month'), 0).getDate();
617
+ return totalMonthDiff + dayDiff / daysInMonth;
618
+ }
614
619
  case 'year':
615
- return this.get('year') - time.get('year');
620
+ return this.diff(time, 'month') / 12;
616
621
  }
617
622
  }
618
623
  calendar(baseDate) {
@@ -844,7 +849,7 @@ export class Chronos {
844
849
  return now
845
850
  .startOf('month')
846
851
  .set('year', year ?? now.year)
847
- .set('month', month ? month - 1 : now.month).lastDateOfMonth;
852
+ .set('month', month ?? now.isoMonth).lastDateOfMonth;
848
853
  };
849
854
  return new _a(year ?? now.year, month ?? now.isoMonth, date ? date
850
855
  : now.isLastDayOfMonth() && now.date >= nextLDoM() ? nextLDoM()
@@ -12,7 +12,7 @@ export function isValidTime(value) {
12
12
  const minute = Number(minuteStr);
13
13
  return hour >= 0 && hour <= 23 && minute >= 0 && minute <= 59;
14
14
  }
15
- export function isValidUTCOffSet(value) {
15
+ export function isValidUTCOffset(value) {
16
16
  return isString(value) ? /^UTC[+-]?\d{1,2}:\d{2}$/.test(value) : false;
17
17
  }
18
18
  export function isValidTimeZoneId(value) {
@@ -1,9 +1,16 @@
1
1
  import { INTERNALS } from '../constants.js';
2
- import { isValidTimeZoneId, isValidUTCOffSet } from '../guards.js';
2
+ import { isValidTimeZoneId, isValidUTCOffset } from '../guards.js';
3
3
  import { TIME_ZONES, TIME_ZONE_IDS, TIME_ZONE_LABELS } from '../timezone.js';
4
4
  import { extractMinutesFromUTC } from '../utils.js';
5
5
  export const timeZonePlugin = (ChronosClass) => {
6
6
  const { internalDate: $Date, withOrigin } = ChronosClass[INTERNALS];
7
+ const _isGMT = (factor) => {
8
+ return factor === 'UTC+00:00' || factor === 'UTC-00:00';
9
+ };
10
+ const TZ_NAME_ABBR_MAP = new Map(Object.entries(TIME_ZONES).map(([tzAbbr, { offset, tzName }]) => [
11
+ offset,
12
+ { tzAbbr, tzName },
13
+ ]));
7
14
  const _isLabelKey = (offset) => {
8
15
  return offset in TIME_ZONE_LABELS;
9
16
  };
@@ -14,8 +21,14 @@ export const timeZonePlugin = (ChronosClass) => {
14
21
  return undefined;
15
22
  };
16
23
  const _getTimeZoneName = (zone) => {
17
- if (isValidUTCOffSet(zone)) {
18
- return _resolveTzName(zone);
24
+ if (_isGMT(zone))
25
+ return 'Greenwich Mean Time';
26
+ if (isValidUTCOffset(zone)) {
27
+ const tzName = _resolveTzName(zone);
28
+ if (!tzName && TZ_NAME_ABBR_MAP.has(zone)) {
29
+ return TZ_NAME_ABBR_MAP.get(zone)?.tzName;
30
+ }
31
+ return tzName;
19
32
  }
20
33
  else if (isValidTimeZoneId(zone)) {
21
34
  const record = TIME_ZONE_IDS[zone];
@@ -24,17 +37,17 @@ export const timeZonePlugin = (ChronosClass) => {
24
37
  else {
25
38
  return zone in TIME_ZONES ?
26
39
  TIME_ZONES[zone].tzName
27
- : _resolveTzName(TIME_ZONES[zone].offset);
40
+ : _resolveTzName(TIME_ZONES[zone]?.offset);
28
41
  }
29
42
  };
30
- const TZ_ID_CACHE = new Map(Object.entries(TIME_ZONE_IDS).reduce((acc, [id, { offset }]) => {
43
+ const TZ_ID_MAP = new Map(Object.entries(TIME_ZONE_IDS).reduce((acc, [id, { offset }]) => {
31
44
  const arr = acc.get(offset) ?? [];
32
45
  arr.push(id);
33
46
  acc.set(offset, arr);
34
47
  return acc;
35
48
  }, new Map()));
36
49
  const _getTimeZoneId = (utc) => {
37
- const tzIds = TZ_ID_CACHE.get(utc);
50
+ const tzIds = TZ_ID_MAP.get(utc);
38
51
  if (!tzIds || tzIds?.length === 0)
39
52
  return undefined;
40
53
  if (tzIds?.length === 1)
@@ -44,7 +57,7 @@ export const timeZonePlugin = (ChronosClass) => {
44
57
  ChronosClass.prototype.timeZone = function (zone) {
45
58
  let offset;
46
59
  let tzId;
47
- if (isValidUTCOffSet(zone)) {
60
+ if (isValidUTCOffset(zone)) {
48
61
  offset = zone;
49
62
  tzId = _getTimeZoneId(offset) || offset;
50
63
  }
@@ -56,51 +69,72 @@ export const timeZonePlugin = (ChronosClass) => {
56
69
  offset = zone in TIME_ZONES ? TIME_ZONES[zone].offset : TIME_ZONES['UTC'].offset;
57
70
  tzId = _getTimeZoneId(offset) || offset;
58
71
  }
59
- const tzName = _getTimeZoneName(zone) ?? TIME_ZONES['UTC'].offset;
72
+ const $zone = zone || offset;
73
+ const tzName = _getTimeZoneName($zone) ?? offset;
60
74
  const targetOffset = extractMinutesFromUTC(offset);
61
75
  const previousOffset = this.getTimeZoneOffsetMinutes();
62
76
  const relativeOffset = targetOffset - previousOffset;
63
77
  const adjustedTime = new Date($Date(this).getTime() + relativeOffset * 60 * 1000);
64
78
  const instance = new ChronosClass(adjustedTime);
65
- return withOrigin(instance, `timeZone`, offset, tzName, tzId, zone);
79
+ return withOrigin(instance, `timeZone`, offset, tzName, tzId, $zone);
66
80
  };
67
81
  ChronosClass.prototype.getTimeZoneName = function (utc) {
68
- const UTC = utc ?? this.utcOffset;
69
- return _getTimeZoneName(this?.$tzTracker ?? UTC) ?? UTC;
82
+ const UTC = utc || this.utcOffset;
83
+ return _getTimeZoneName(utc || this?.$tzTracker || this.utcOffset) ?? UTC;
84
+ };
85
+ const TZ_ABBR_CACHE = new Map();
86
+ const _abbreviate = (name) => {
87
+ return name
88
+ .split(/\s+/)
89
+ .map((w) => w[0])
90
+ .join('')
91
+ .replace(/\W/g, '');
70
92
  };
71
- const TZ_SHORT_CACHE = new Map();
72
93
  ChronosClass.prototype.getTimeZoneNameShort = function (utc) {
73
94
  const tracker = this?.$tzTracker;
95
+ const UTC = utc || this.utcOffset;
96
+ const tzMapKey = utc || tracker || this.utcOffset;
97
+ if (_isGMT(tzMapKey))
98
+ return 'GMT';
74
99
  if (!utc && tracker && tracker in TIME_ZONES)
75
100
  return tracker;
76
- const zone = this.getTimeZoneName(utc);
77
- if (TZ_SHORT_CACHE.has(zone))
78
- return TZ_SHORT_CACHE.get(zone);
79
- const customAbbr = isValidUTCOffSet(zone) || isValidTimeZoneId(zone) ?
80
- zone
81
- : zone
82
- .split(/\s+/)
83
- .map((w) => w?.[0])
84
- .join('')
85
- .replace(/\W/g, '');
86
- TZ_SHORT_CACHE.set(zone, customAbbr);
101
+ if (isValidUTCOffset(tzMapKey)) {
102
+ if (TZ_ABBR_CACHE.has(tzMapKey))
103
+ return TZ_ABBR_CACHE.get(tzMapKey);
104
+ if (TZ_NAME_ABBR_MAP.has(tzMapKey)) {
105
+ return TZ_NAME_ABBR_MAP.get(tzMapKey)?.tzAbbr;
106
+ }
107
+ const tzName = _resolveTzName(tzMapKey);
108
+ if (tzName) {
109
+ const tzAbbr = _abbreviate(tzName);
110
+ TZ_ABBR_CACHE.set(tzMapKey, tzAbbr);
111
+ return tzAbbr;
112
+ }
113
+ }
114
+ const zone = _getTimeZoneName(tzMapKey) ?? UTC;
115
+ if (TZ_ABBR_CACHE.has(`name-${zone}`))
116
+ return TZ_ABBR_CACHE.get(zone);
117
+ const customAbbr = isValidUTCOffset(zone) || isValidTimeZoneId(zone) ? zone : _abbreviate(zone);
118
+ TZ_ABBR_CACHE.set(`name-${zone}`, customAbbr);
87
119
  return customAbbr;
88
120
  };
121
+ ChronosClass.prototype.getTimeZoneNameAbbr = function (utc) {
122
+ return this.getTimeZoneNameShort(utc);
123
+ };
89
124
  ChronosClass.prototype.toString = function () {
90
125
  const offset = this.utcOffset;
126
+ const search = /GMT[+-]\d{4}\s+\([^)]+\)/;
91
127
  switch (this.origin) {
92
128
  case 'timeZone': {
93
129
  const gmt = offset.replace('UTC', 'GMT').replace(':', '');
94
130
  const label = this.getTimeZoneName();
95
- return $Date(this)
96
- .toString()
97
- .replace(/GMT[+-]\d{4}\s+\([^)]+\)/, `${gmt} (${label})`);
131
+ return $Date(this).toString().replace(search, `${gmt} (${label})`);
98
132
  }
99
133
  case 'toUTC':
100
134
  case 'utc': {
101
135
  return $Date(this)
102
136
  .toString()
103
- .replace(/GMT[+-]\d{4}\s+\([^)]+\)/, `GMT+0000 (Coordinated Universal Time)`);
137
+ .replace(search, `GMT+0000 (Coordinated Universal Time)`);
104
138
  }
105
139
  default:
106
140
  return $Date(this).toString();
@@ -248,7 +248,7 @@ export const TIME_ZONES = Object.freeze({
248
248
  offset: 'UTC+07:00',
249
249
  },
250
250
  DDUT: {
251
- tzName: "Dumont d'Urville Time (in French Antarctic Station)",
251
+ tzName: "Dumont d'Urville Time (Antarctic Station in French)",
252
252
  offset: 'UTC+10:00',
253
253
  },
254
254
  DFT: {
@@ -396,7 +396,7 @@ export const TIME_ZONES = Object.freeze({
396
396
  offset: 'UTC+07:00',
397
397
  },
398
398
  IDLW: {
399
- tzName: 'International Date Line West time zone',
399
+ tzName: 'International Date Line West',
400
400
  offset: 'UTC-12:00',
401
401
  },
402
402
  IDT: {
@@ -889,7 +889,7 @@ export const TIME_ZONE_LABELS = Object.freeze({
889
889
  'UTC+10:30': 'Lord Howe Standard Time',
890
890
  'UTC+11:00': 'Central Pacific Standard Time',
891
891
  'UTC+12:00': 'New Zealand Standard Time',
892
- 'UTC+12:45': 'Chatham Islands Time',
892
+ 'UTC+12:45': 'Chatham Standard Time',
893
893
  'UTC+13:00': 'Phoenix Island Time',
894
894
  'UTC+14:00': 'Line Islands Time',
895
895
  });
package/dist/esm/index.js CHANGED
@@ -4,7 +4,7 @@ export { isCamelCase, isEmojiOnly, isKebabCase, isPalindrome, isPascalCase, isSn
4
4
  export { convertStringCase } from './string/case.js';
5
5
  export { extractEmails, extractURLs, formatUnitWithPlural as formatNumberWithPluralUnit, formatUnitWithPlural, formatUnitWithPlural as formatWithPlural, maskString, normalizeString, replaceAllInString, reverseString, slugifyString, } from './string/convert.js';
6
6
  export { countWords, countWords as countWordsInString, extractNumbersFromString as extractNumbers, extractNumbersFromString, getLevenshteinDistance, getLevenshteinDistance as levenshteinDistance, extractNumbersFromString as parseNumbersFromText, countWords as wordCount, } from './string/utilities.js';
7
- export { AreaConverter, Converter, converter, DataConverter, LengthConverter, MassConverter, TemperatureConverter, TimeConverter, VolumeConverter, } from './converter/Converter.js';
7
+ export { AreaConverter, Converter, DataConverter, LengthConverter, MassConverter, TemperatureConverter, TimeConverter, VolumeConverter, converter, } from './converter/Converter.js';
8
8
  export { Pluralizer, pluralizer } from './pluralizer/Pluralizer.js';
9
9
  export { Verbalizer, verbalizer } from './verbalizer/Verbalizer.js';
10
10
  export { getAverage as calculateAverage, factorial as calculateFactorial, calculateHCF as calculateGCD, calculateHCF, calculateLCM as calculateLCD, calculateLCM, convertToDecimal, convertToDecimal as convertToFixed, factorial, getFactors as factorsOf, getAverage, getAverage as getAverageOfNumbers, getFactors as getDivisors, factorial as getFactorial, getFactors, getRandomNumber as getRandomInt, getRandomNumber, sumNumbers as getSumOfNumbers, reverseNumber, roundNumber, roundNumber as roundToDecimal, sumDigits, sumNumbers, sumNumbers as sumOfNumbers, } from './number/basics.js';
@@ -13,18 +13,18 @@ export { Unit, Unit as UnitConverter } from './number/Unit.js';
13
13
  export { calculatePercentage } from './number/percent.js';
14
14
  export { fibonacciGenerator, fibonacciGenerator as generateFibonacci, getFibonacciSeries as getFibonacci, getFibonacciSeries as getFibonacciNumbers, getFibonacciSeries, getFibonacciSeriesMemo, getFibonacciSeriesMemo as getMemoizedFibonacci, getFibonacciSeriesMemo as getMemoizedFibonacciSeries, getNthFibonacci, } from './number/fibonacci.js';
15
15
  export { areInvalidNumbers, areInvalidNumbers as areNumbersInvalid, isEven, isEven as isEvenNumber, isFibonacci, areInvalidNumbers as isInvalidNumber, isMultiple, areInvalidNumbers as isNumberInvalid, isOdd, isOdd as isOddNumber, isFibonacci as isPartOfFibonacci, isFibonacci as isPartOfFibonacciSeries, isPerfectSquare, } from './number/guards.js';
16
- export { convertToRomanNumerals as arabicToRoman, numberToWordsOrdinal as cardinalWordsToOrdinal, numberToWords as convertNumberToWords, numberToWordsOrdinal as convertNumberToWordsOrdinal, romanToInteger as convertRomanToArabic, romanToInteger as convertRomanToInteger, romanToInteger as convertRomanToNumeric, convertToRomanNumerals, wordsToNumber as convertWordsToNumber, wordsToNumber as convertWordToNumber, convertToRomanNumerals as integerToRoman, convertToRomanNumerals as numberToRoman, numberToWords, numberToWordsOrdinal, convertToRomanNumerals as numericToRoman, romanToInteger as romanToArabic, romanToInteger, romanToInteger as romanToNumeric, convertToRomanNumerals as toRoman, convertToRomanNumerals as toRomanNumeral, wordsToNumber, wordsToNumber as wordToNumber, } from './number/convert.js';
16
+ export { convertToRomanNumerals as arabicToRoman, numberToWordsOrdinal as cardinalWordsToOrdinal, numberToWords as convertNumberToWords, numberToWordsOrdinal as convertNumberToWordsOrdinal, romanToInteger as convertRomanToArabic, romanToInteger as convertRomanToInteger, romanToInteger as convertRomanToNumeric, convertToRomanNumerals, wordsToNumber as convertWordToNumber, wordsToNumber as convertWordsToNumber, convertToRomanNumerals as integerToRoman, convertToRomanNumerals as numberToRoman, numberToWords, numberToWordsOrdinal, convertToRomanNumerals as numericToRoman, romanToInteger as romanToArabic, romanToInteger, romanToInteger as romanToNumeric, convertToRomanNumerals as toRoman, convertToRomanNumerals as toRomanNumeral, wordsToNumber as wordToNumber, wordsToNumber, } from './number/convert.js';
17
17
  export { findPrimeNumbers, findPrimeNumbers as getPrimeNumbers, isPrime, isPrime as isPrimeNumber, } from './number/prime.js';
18
18
  export { getOrdinal as cardinalToOrdinal, clampNumber, formatCurrency as convertNumberToCurrency, getOrdinal as convertNumberToOrdinal, getOrdinal as convertToOrdinal, formatCurrency, getOrdinal, getOrdinal as getOrdinalNumber, getRandomFloat as getRandomDecimal, getRandomFloat, normalizeNumber, getOrdinal as numberToOrdinal, roundToNearest as roundNumberToNearestInterval, roundToNearest, roundToNearest as roundToNearestInterval, } from './number/utilities.js';
19
19
  export { getNumbersInRange } from './number/range.js';
20
20
  export { getColorForInitial } from './colors/initials.js';
21
21
  export { generateRandomColor, generateRandomColorInHexRGB, generateRandomHSLColor as generateRandomHSL, generateRandomHSLColor, generateRandomColor as getRandomColor, generateRandomHSLColor as getRandomHSL, } from './colors/random.js';
22
- export { convertColorCode, convertHex8ToHsla, convertHex8ToRgba, convertHexToHsl, convertHexToRgb, convertHslaToHex8, convertHslaToRgba, convertHslToHex, convertHslToRgb, convertRgbaToHex8, convertRgbaToHsla, convertRgbToHex, convertRgbToHsl, convertRgbToRgba, } from './colors/convert.js';
23
- export { _isHex6 as isHex6, _isHex8 as isHex8, _isHSL as isHSL, _isHSLA as isHSLA, _isRGB as isRGB, _isRGBA as isRGBA, } from './colors/helpers.js';
22
+ export { convertColorCode, convertHex8ToHsla, convertHex8ToRgba, convertHexToHsl, convertHexToRgb, convertHslToHex, convertHslToRgb, convertHslaToHex8, convertHslaToRgba, convertRgbToHex, convertRgbToHsl, convertRgbToRgba, convertRgbaToHex8, convertRgbaToHsla, } from './colors/convert.js';
23
+ export { _isHSL as isHSL, _isHSLA as isHSLA, _isHex6 as isHex6, _isHex8 as isHex8, _isRGB as isRGB, _isRGBA as isRGBA, } from './colors/helpers.js';
24
24
  export { Color, Color as Colour } from './colors/Color.js';
25
25
  export { extractAlphaColorValues, extractSolidColorValues } from './colors/utils.js';
26
26
  export { getGreeting as generateGreeting, getGreeting, getGreeting as greet, } from './date/greet.js';
27
- export { isDateLike, isLeapYear, isValidTime, isValidTime as isValidTimeString, isValidUTCOffSet as isValidUTC, isValidUTCOffSet, isValidTimeZoneId, } from './date/guards.js';
27
+ export { isDateLike, isLeapYear, isValidTime, isValidTime as isValidTimeString, isValidTimeZoneId, isValidUTCOffset, isValidUTCOffset as isValidUTC, isValidUTCOffset as isValidUTCOffSet, } from './date/guards.js';
28
28
  export { Chronos, Chronos as Chronus } from './date/Chronos.js';
29
29
  export { INTERNALS } from './date/constants.js';
30
30
  export { chronos, chronos as chronosjs, chronos as chronosts, chronos as chronus, chronos as chronusjs, chronos as chronusts, } from './date/chronos-fn.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nhb-toolbox",
3
- "version": "4.26.20",
3
+ "version": "4.26.30",
4
4
  "description": "A versatile collection of smart, efficient, and reusable utility functions, classes and types for everyday development needs.",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -42,8 +42,8 @@
42
42
  "@eslint/js": "^9.39.1",
43
43
  "@types/jest": "^30.0.0",
44
44
  "@types/node": "^24.10.0",
45
- "@typescript-eslint/eslint-plugin": "^8.46.3",
46
- "@typescript-eslint/parser": "^8.46.3",
45
+ "@typescript-eslint/eslint-plugin": "^8.46.4",
46
+ "@typescript-eslint/parser": "^8.46.4",
47
47
  "eslint": "^9.39.1",
48
48
  "eslint-config-prettier": "^10.1.8",
49
49
  "eslint-plugin-prettier": "^5.5.4",
@@ -56,7 +56,7 @@
56
56
  "ts-jest": "^29.4.5",
57
57
  "ts-node": "^10.9.2",
58
58
  "typescript": "^5.9.3",
59
- "typescript-eslint": "^8.46.3"
59
+ "typescript-eslint": "^8.46.4"
60
60
  },
61
61
  "keywords": [
62
62
  "toolbox",