nhb-toolbox 4.0.21 → 4.0.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.
@@ -47,14 +47,12 @@ class Chronos {
47
47
  * @returns Instance of `Chronos` with all methods and properties.
48
48
  */
49
49
  constructor(valueOrYear, month, date, hours, minutes, seconds, ms) {
50
- let newDate;
51
50
  if (typeof valueOrYear === 'number' && typeof month === 'number') {
52
- newDate = new Date(valueOrYear, month - 1, date ?? 1, hours ?? 0, minutes ?? 0, seconds ?? 0, ms ?? 0);
51
+ this.#date = new Date(valueOrYear, month - 1, date ?? 1, hours ?? 0, minutes ?? 0, seconds ?? 0, ms ?? 0);
53
52
  }
54
53
  else {
55
- newDate = this.#toNewDate(valueOrYear);
54
+ this.#date = this.#toNewDate(valueOrYear);
56
55
  }
57
- this.#date = newDate;
58
56
  this[constants_1.ORIGIN] = 'root';
59
57
  this.#offset = `UTC${this.getUTCOffset()}`;
60
58
  }
@@ -69,6 +67,8 @@ class Chronos {
69
67
  yield ['minute', this.minute];
70
68
  yield ['second', this.second];
71
69
  yield ['millisecond', this.millisecond];
70
+ yield ['timestamp', this.timestamp];
71
+ yield ['unix', this.unix];
72
72
  }
73
73
  /**
74
74
  * * Enables primitive coercion like `console.log`, `${chronos}`, etc.
@@ -268,9 +268,9 @@ class Chronos {
268
268
  get isoMonth() {
269
269
  return this.month + 1;
270
270
  }
271
- /** Gets the time value in milliseconds since midnight, January 1, 1970 UTC. */
271
+ /** Gets the time value in seconds since midnight, January 1, 1970 UTC. */
272
272
  get unix() {
273
- return this.#date.getTime();
273
+ return this.#date.getTime() / 1000;
274
274
  }
275
275
  /** Gets the time value in milliseconds since midnight, January 1, 1970 UTC. */
276
276
  get timestamp() {
@@ -615,6 +615,44 @@ class Chronos {
615
615
  isWorkday(weekStartsOn = 0, weekendLength = 2) {
616
616
  return !this.isWeekend(weekStartsOn, weekendLength);
617
617
  }
618
+ /**
619
+ * @instance Checks if the current date and time fall within business hours.
620
+ *
621
+ * @param businessStartHour Optional starting hour of business time (0–23). Defaults to `9` (9 AM).
622
+ * @param businessEndHour Optional ending hour of business time (0–23). Defaults to `17` (5 PM).
623
+ * @param weekStartsOn Optional day the week starts on (0–6). Default is `0` (Sunday).
624
+ * @param weekendLength Optional weekend length (1 or 2). Default is `2`.
625
+ *
626
+ * @returns Whether the current time is within business hours.
627
+ *
628
+ * @remarks
629
+ * * Business hours are typically 9 AM to 5 PM on weekdays.
630
+ * * Supports standard and overnight business hours. Overnight means `end < start`.
631
+ * * Example: `businessStartHour = 22`, `businessEndHour = 6` will cover 10 PM to 6 AM next day.
632
+ *
633
+ * * *Weekends are determined by `weekStartsOn` and `weekendLength` using the `isWeekend()` method.*
634
+ *
635
+ * - Business hours are `[businessStartHour, businessEndHour)`.
636
+ * - If `weekendLength` is `1`, only the last day of the week is treated as weekend.
637
+ * - If `weekendLength` is `2`, the last two days are treated as weekend.
638
+ */
639
+ isBusinessHour(businessStartHour = 9, businessEndHour = 17, weekStartsOn = 0, weekendLength = 2) {
640
+ if (this.isWeekend(weekStartsOn, weekendLength)) {
641
+ return false;
642
+ }
643
+ const hour = this.#date.getHours();
644
+ if (businessStartHour === businessEndHour) {
645
+ return false;
646
+ }
647
+ if (businessStartHour < businessEndHour) {
648
+ // Normal range, e.g. 9 → 17
649
+ return hour >= businessStartHour && hour < businessEndHour;
650
+ }
651
+ else {
652
+ // Overnight shift, e.g. 22 → 6
653
+ return hour >= businessStartHour || hour < businessEndHour;
654
+ }
655
+ }
618
656
  /**
619
657
  * @instance Checks if the current date is a palindrome in either padded or non-padded format.
620
658
  *
@@ -1372,6 +1410,71 @@ class Chronos {
1372
1410
  }
1373
1411
  return new Chronos(new Date(values.year ?? 1970, (values.month ?? 1) - 1, values.date ?? 1, values.hour ?? 0, values.minute ?? 0, values.second ?? 0)).#withOrigin('parse');
1374
1412
  }
1413
+ /**
1414
+ * * Rounds the current date-time to the nearest specified unit and interval.
1415
+ *
1416
+ * @param unit - The unit to round (`year`, `month`, `week`, `day`, `hour`, `minute`, `second`, `millisecond`).
1417
+ *
1418
+ * @param nearest - The interval to round to. Defaults to `1`.
1419
+ * @returns A new `Chronos` instance with the rounded value. For wrong unit returns current instance. Rounded *Month and Week are 0 based.*
1420
+ */
1421
+ round(unit, nearest = 1) {
1422
+ const date = new Date(this.#date);
1423
+ switch (unit) {
1424
+ case 'millisecond': {
1425
+ const rounded = (0, utilities_1.roundToNearest)(date.getMilliseconds(), nearest);
1426
+ date.setMilliseconds(rounded);
1427
+ break;
1428
+ }
1429
+ case 'second': {
1430
+ const rounded = (0, utilities_1.roundToNearest)(date.getSeconds(), nearest);
1431
+ date.setSeconds(rounded, 0);
1432
+ break;
1433
+ }
1434
+ case 'minute': {
1435
+ const rounded = (0, utilities_1.roundToNearest)(date.getMinutes(), nearest);
1436
+ date.setMinutes(rounded, 0, 0);
1437
+ break;
1438
+ }
1439
+ case 'hour': {
1440
+ const rounded = (0, utilities_1.roundToNearest)(date.getHours(), nearest);
1441
+ date.setHours(rounded, 0, 0, 0);
1442
+ break;
1443
+ }
1444
+ case 'day': {
1445
+ const rounded = (0, utilities_1.roundToNearest)(date.getDate(), nearest);
1446
+ date.setDate(rounded);
1447
+ date.setHours(0, 0, 0, 0);
1448
+ break;
1449
+ }
1450
+ case 'week': {
1451
+ const currentWeek = this.getWeek();
1452
+ const roundedWeek = (0, utilities_1.roundToNearest)(currentWeek, nearest);
1453
+ const startOfYear = new Date(date.getFullYear(), 0, 1);
1454
+ const daysOffset = (roundedWeek - 1) * 7;
1455
+ startOfYear.setDate(startOfYear.getDate() + daysOffset);
1456
+ startOfYear.setHours(0, 0, 0, 0);
1457
+ return new Chronos(startOfYear);
1458
+ }
1459
+ case 'month': {
1460
+ const currentMonth = date.getMonth();
1461
+ const roundedMonth = (0, utilities_1.roundToNearest)(currentMonth, nearest);
1462
+ date.setMonth(roundedMonth, 1);
1463
+ date.setHours(0, 0, 0, 0);
1464
+ break;
1465
+ }
1466
+ case 'year': {
1467
+ const currentYear = date.getFullYear();
1468
+ const roundedYear = (0, utilities_1.roundToNearest)(currentYear, nearest);
1469
+ date.setFullYear(roundedYear, 0, 1);
1470
+ date.setHours(0, 0, 0, 0);
1471
+ break;
1472
+ }
1473
+ default:
1474
+ return this;
1475
+ }
1476
+ return new Chronos(date).#withOrigin('round');
1477
+ }
1375
1478
  /**
1376
1479
  * @static Returns the current date and time in a specified format in local time.
1377
1480
  * * Default format is dd, `mmm DD, YYYY HH:mm:ss` = `Sun, Apr 06, 2025 16:11:55`
package/dist/cjs/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.convertToRomanNumerals = exports.convertNumberToWords = exports.isPerfectSquare = exports.isParOfFibonacciSeries = exports.isParOfFibonacci = exports.isOddNumber = exports.isOdd = exports.isMultiple = exports.isFibonacci = exports.isEvenNumber = exports.isEven = exports.sumOfNumbers = exports.sumNumbers = exports.sumDigits = exports.reverseNumber = exports.getSumOfNumbers = exports.getRandomNumber = exports.getFibonacciSeries = exports.getFibonacciNumbers = exports.getFibonacci = exports.convertToDecimal = exports.calculateLCM = exports.calculateLCD = exports.calculateHCF = exports.calculateGCD = exports.levenshteinDistance = exports.getLevenshteinDistance = exports.extractNumbersFromString = 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
- exports.Chronus = exports.Chronos = exports.isValidUTCOffSet = exports.isValidUTC = exports.isValidTimeString = exports.isValidTime = exports.isLeapYear = exports.greet = exports.getGreeting = exports.generateGreeting = exports.Colour = exports.Color = exports.convertRgbToRgba = exports.convertRgbToHsl = exports.convertRgbToHex = exports.convertRgbaToHsla = exports.convertRgbaToHex8 = exports.convertHslToRgb = exports.convertHslToHex = exports.convertHslaToRgba = exports.convertHslaToHex8 = exports.convertHexToRgb = exports.convertHexToHsl = exports.convertHex8ToRgba = exports.convertHex8ToHsla = exports.convertColorCode = exports.generateRandomHSLColor = exports.generateRandomColorInHexRGB = exports.getColorForInitial = exports.getNumbersInRange = exports.roundToNearestInterval = exports.roundToNearest = exports.roundNumberToNearestInterval = exports.roundNumber = exports.numberToOrdinal = 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.numberToWords = void 0;
5
- exports.cloneObject = exports.isValidFormData = exports.isOriginFileObj = exports.isFileUpload = 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.splitArray = exports.rotateArray = exports.removeDuplicatesFromArray = exports.moveArrayElement = exports.createOptionsArray = exports.sortAnArray = exports.shuffleArray = exports.isValidEmptyArray = exports.isInvalidOrEmptyArray = exports.getLastArrayElement = exports.flattenArray = exports.filterArrayOfObjects = exports.minutesToUTCOffset = exports.getTotalMinutesFromUTC = exports.getTotalMinutesFromTime = exports.getTotalMinutes = exports.getTimeStringFromUTC = exports.getMinutesFromUTC = exports.getCurrentTime = exports.getCurrentDateTime = exports.formatUTCOffset = exports.extractTotalMinutesFromTime = exports.extractTimeStringFromUTC = exports.extractTimeFromUTC = exports.extractMinutesFromUTC = exports.extractHourMinute = exports.convertMinutesToUTCOffset = exports.chronusts = exports.chronusjs = exports.chronus = exports.chronosts = exports.chronosjs = exports.chronos = void 0;
6
- exports.isInteger = exports.isFalsy = exports.isBoolean = exports.throttleAction = exports.isDeepEqual = exports.getClassDetails = exports.getStaticMethodsCount = exports.getStaticMethodNames = exports.getInstanceMethodsCount = exports.getInstanceMethodNames = exports.debounceAction = exports.countStaticMethods = exports.countInstanceMethods = exports.convertArrayToString = exports.saveToSessionStorage = exports.saveToLocalStorage = exports.removeFromSessionStorage = exports.removeFromLocalStorage = exports.getFromSessionStorage = exports.getFromLocalStorage = exports.toggleFullScreen = exports.smoothScrollTo = exports.copyToClipboard = exports.updateQueryParam = exports.getQueryParams = exports.generateQueryParams = exports.formatQueryParams = exports.createQueryParams = exports.remapObjectFields = exports.remapFields = exports.pickObjectFieldsByCondition = exports.pickObjectFields = exports.pickFieldsByCondition = exports.pickFields = exports.convertObjectValues = exports.sanitizeData = exports.parseStringifiedValues = exports.parseStringifiedPrimitives = exports.parseStringifiedObjectValues = exports.parsePrimitives = exports.parsePrimitiveData = exports.parseObjectValues = exports.mergeObjects = exports.mergeAndFlattenObjects = exports.flattenObjectKeyValue = exports.flattenObjectDotNotation = exports.extractUpdatedFields = exports.extractUpdatedAndNewFields = exports.extractNewFields = exports.countObjectFields = void 0;
7
- 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.isValidSet = exports.isValidObject = exports.isValidMap = exports.isValidJSON = exports.isValidArray = exports.isSet = exports.isReturningPromise = exports.isRegularExpression = exports.isMethod = exports.isMethodDescriptor = exports.isRegExp = exports.isPromise = exports.isObjectWithKeys = exports.isObjectEmpty = exports.isObject = exports.isNotEmptyObject = exports.isMap = exports.isJSONObject = exports.isJSON = exports.isFunction = exports.isError = exports.isEmptyObjectGuard = exports.isEmptyObject = exports.isDate = exports.isBigInt = 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.isNonEmptyString = void 0;
8
- exports.isValidURL = exports.isValidEmail = exports.isUUID = exports.isURL = exports.isPhoneNumber = void 0;
3
+ exports.getFibonacci = exports.generateFibonacci = exports.fibonacciGenerator = exports.sumOfNumbers = exports.sumNumbers = exports.sumDigits = exports.reverseNumber = exports.percentageOfWhat = exports.getValueFromPercentage = exports.getSumOfNumbers = exports.getRandomNumber = exports.getPercentageResult = exports.getPercentageOfWhat = exports.getPercentage = exports.getOriginalNumberFromPercentage = exports.getAverageOfNumbers = exports.getAverage = exports.convertToDecimal = exports.calculatePercentage = exports.calculateOriginalFromPercentage = exports.calculateLCM = exports.calculateLCD = exports.calculateHCF = exports.calculateGCD = exports.calculateAverage = exports.levenshteinDistance = exports.getLevenshteinDistance = exports.extractNumbersFromString = 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
+ exports.convertHslToRgb = exports.convertHslToHex = exports.convertHslaToRgba = exports.convertHslaToHex8 = exports.convertHexToRgb = exports.convertHexToHsl = exports.convertHex8ToRgba = exports.convertHex8ToHsla = exports.convertColorCode = exports.generateRandomHSLColor = exports.generateRandomColorInHexRGB = exports.getColorForInitial = exports.getNumbersInRange = exports.roundToNearestInterval = exports.roundToNearest = exports.roundNumberToNearestInterval = exports.roundNumber = exports.numberToOrdinal = 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.numberToWords = exports.convertToRomanNumerals = exports.convertNumberToWords = exports.isPerfectSquare = exports.isParOfFibonacciSeries = exports.isParOfFibonacci = exports.isOddNumber = exports.isOdd = exports.isMultiple = exports.isFibonacci = exports.isEvenNumber = exports.isEven = exports.getNthFibonacci = exports.getMemoizedFibonacciSeries = exports.getMemoizedFibonacci = exports.getFibonacciSeriesMemo = exports.getFibonacciSeries = exports.getFibonacciNumbers = void 0;
5
+ exports.splitArray = exports.rotateArray = exports.removeDuplicatesFromArray = exports.moveArrayElement = exports.createOptionsArray = exports.sortAnArray = exports.shuffleArray = exports.isValidEmptyArray = exports.isInvalidOrEmptyArray = exports.getLastArrayElement = exports.flattenArray = exports.filterArrayOfObjects = exports.minutesToUTCOffset = exports.getTotalMinutesFromUTC = exports.getTotalMinutesFromTime = exports.getTotalMinutes = exports.getTimeStringFromUTC = exports.getMinutesFromUTC = exports.getCurrentTime = exports.getCurrentDateTime = exports.formatUTCOffset = exports.extractTotalMinutesFromTime = exports.extractTimeStringFromUTC = exports.extractTimeFromUTC = exports.extractMinutesFromUTC = exports.extractHourMinute = exports.convertMinutesToUTCOffset = exports.chronusts = exports.chronusjs = exports.chronus = exports.chronosts = exports.chronosjs = exports.chronos = exports.Chronus = exports.Chronos = exports.isValidUTCOffSet = exports.isValidUTC = exports.isValidTimeString = exports.isValidTime = exports.isLeapYear = exports.greet = exports.getGreeting = exports.generateGreeting = exports.Colour = exports.Color = exports.convertRgbToRgba = exports.convertRgbToHsl = exports.convertRgbToHex = exports.convertRgbaToHsla = exports.convertRgbaToHex8 = void 0;
6
+ exports.removeFromLocalStorage = exports.getFromSessionStorage = exports.getFromLocalStorage = exports.toggleFullScreen = exports.smoothScrollTo = exports.copyToClipboard = exports.updateQueryParam = exports.getQueryParams = exports.generateQueryParams = exports.formatQueryParams = exports.createQueryParams = exports.remapObjectFields = exports.remapFields = exports.pickObjectFieldsByCondition = exports.pickObjectFields = exports.pickFieldsByCondition = exports.pickFields = exports.convertObjectValues = exports.sanitizeData = exports.parseStringifiedValues = exports.parseStringifiedPrimitives = exports.parseStringifiedObjectValues = exports.parsePrimitives = exports.parsePrimitiveData = exports.parseObjectValues = exports.mergeObjects = exports.mergeAndFlattenObjects = exports.flattenObjectKeyValue = exports.flattenObjectDotNotation = exports.extractUpdatedFields = exports.extractUpdatedAndNewFields = exports.extractNewFields = exports.countObjectFields = exports.cloneObject = exports.isValidFormData = exports.isOriginFileObj = exports.isFileUpload = 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 = void 0;
7
+ exports.isSet = exports.isReturningPromise = exports.isRegularExpression = exports.isRegExp = exports.isPromise = 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.isBigInt = 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.isNonEmptyString = exports.isInteger = exports.isFalsy = exports.isBoolean = exports.throttleAction = exports.isDeepEqual = exports.getStaticMethodsCount = exports.getStaticMethodNames = exports.getInstanceMethodsCount = exports.getInstanceMethodNames = exports.getClassDetails = exports.debounceAction = exports.countStaticMethods = exports.countInstanceMethods = exports.convertArrayToString = exports.saveToSessionStorage = exports.saveToLocalStorage = exports.removeFromSessionStorage = void 0;
8
+ 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.isValidSet = exports.isValidObject = exports.isValidMap = exports.isValidJSON = exports.isValidArray = void 0;
9
9
  // ! String Utilities
10
10
  var basics_1 = require("./string/basics");
11
11
  Object.defineProperty(exports, "capitalizeString", { enumerable: true, get: function () { return basics_1.capitalizeString; } });
@@ -39,20 +39,38 @@ Object.defineProperty(exports, "getLevenshteinDistance", { enumerable: true, get
39
39
  Object.defineProperty(exports, "levenshteinDistance", { enumerable: true, get: function () { return utilities_1.getLevenshteinDistance; } });
40
40
  // ! Number Utilities
41
41
  var basics_2 = require("./number/basics");
42
+ Object.defineProperty(exports, "calculateAverage", { enumerable: true, get: function () { return basics_2.getAverage; } });
42
43
  Object.defineProperty(exports, "calculateGCD", { enumerable: true, get: function () { return basics_2.calculateHCF; } });
43
44
  Object.defineProperty(exports, "calculateHCF", { enumerable: true, get: function () { return basics_2.calculateHCF; } });
44
45
  Object.defineProperty(exports, "calculateLCD", { enumerable: true, get: function () { return basics_2.calculateLCM; } });
45
46
  Object.defineProperty(exports, "calculateLCM", { enumerable: true, get: function () { return basics_2.calculateLCM; } });
47
+ Object.defineProperty(exports, "calculateOriginalFromPercentage", { enumerable: true, get: function () { return basics_2.getOriginalFromPercentage; } });
48
+ Object.defineProperty(exports, "calculatePercentage", { enumerable: true, get: function () { return basics_2.getPercentage; } });
46
49
  Object.defineProperty(exports, "convertToDecimal", { enumerable: true, get: function () { return basics_2.convertToDecimal; } });
47
- Object.defineProperty(exports, "getFibonacci", { enumerable: true, get: function () { return basics_2.getFibonacciSeries; } });
48
- Object.defineProperty(exports, "getFibonacciNumbers", { enumerable: true, get: function () { return basics_2.getFibonacciSeries; } });
49
- Object.defineProperty(exports, "getFibonacciSeries", { enumerable: true, get: function () { return basics_2.getFibonacciSeries; } });
50
+ Object.defineProperty(exports, "getAverage", { enumerable: true, get: function () { return basics_2.getAverage; } });
51
+ Object.defineProperty(exports, "getAverageOfNumbers", { enumerable: true, get: function () { return basics_2.getAverage; } });
52
+ Object.defineProperty(exports, "getOriginalNumberFromPercentage", { enumerable: true, get: function () { return basics_2.getOriginalFromPercentage; } });
53
+ Object.defineProperty(exports, "getPercentage", { enumerable: true, get: function () { return basics_2.getPercentage; } });
54
+ Object.defineProperty(exports, "getPercentageOfWhat", { enumerable: true, get: function () { return basics_2.getOriginalFromPercentage; } });
55
+ Object.defineProperty(exports, "getPercentageResult", { enumerable: true, get: function () { return basics_2.getValueFromPercentage; } });
50
56
  Object.defineProperty(exports, "getRandomNumber", { enumerable: true, get: function () { return basics_2.getRandomNumber; } });
51
57
  Object.defineProperty(exports, "getSumOfNumbers", { enumerable: true, get: function () { return basics_2.sumNumbers; } });
58
+ Object.defineProperty(exports, "getValueFromPercentage", { enumerable: true, get: function () { return basics_2.getValueFromPercentage; } });
59
+ Object.defineProperty(exports, "percentageOfWhat", { enumerable: true, get: function () { return basics_2.getOriginalFromPercentage; } });
52
60
  Object.defineProperty(exports, "reverseNumber", { enumerable: true, get: function () { return basics_2.reverseNumber; } });
53
61
  Object.defineProperty(exports, "sumDigits", { enumerable: true, get: function () { return basics_2.sumDigits; } });
54
62
  Object.defineProperty(exports, "sumNumbers", { enumerable: true, get: function () { return basics_2.sumNumbers; } });
55
63
  Object.defineProperty(exports, "sumOfNumbers", { enumerable: true, get: function () { return basics_2.sumNumbers; } });
64
+ var fibonacci_1 = require("./number/fibonacci");
65
+ Object.defineProperty(exports, "fibonacciGenerator", { enumerable: true, get: function () { return fibonacci_1.fibonacciGenerator; } });
66
+ Object.defineProperty(exports, "generateFibonacci", { enumerable: true, get: function () { return fibonacci_1.fibonacciGenerator; } });
67
+ Object.defineProperty(exports, "getFibonacci", { enumerable: true, get: function () { return fibonacci_1.getFibonacciSeries; } });
68
+ Object.defineProperty(exports, "getFibonacciNumbers", { enumerable: true, get: function () { return fibonacci_1.getFibonacciSeries; } });
69
+ Object.defineProperty(exports, "getFibonacciSeries", { enumerable: true, get: function () { return fibonacci_1.getFibonacciSeries; } });
70
+ Object.defineProperty(exports, "getFibonacciSeriesMemo", { enumerable: true, get: function () { return fibonacci_1.getFibonacciSeriesMemo; } });
71
+ Object.defineProperty(exports, "getMemoizedFibonacci", { enumerable: true, get: function () { return fibonacci_1.getFibonacciSeriesMemo; } });
72
+ Object.defineProperty(exports, "getMemoizedFibonacciSeries", { enumerable: true, get: function () { return fibonacci_1.getFibonacciSeriesMemo; } });
73
+ Object.defineProperty(exports, "getNthFibonacci", { enumerable: true, get: function () { return fibonacci_1.getNthFibonacci; } });
56
74
  var guards_2 = require("./number/guards");
57
75
  Object.defineProperty(exports, "isEven", { enumerable: true, get: function () { return guards_2.isEven; } });
58
76
  Object.defineProperty(exports, "isEvenNumber", { enumerable: true, get: function () { return guards_2.isEven; } });
@@ -240,11 +258,11 @@ Object.defineProperty(exports, "convertArrayToString", { enumerable: true, get:
240
258
  Object.defineProperty(exports, "countInstanceMethods", { enumerable: true, get: function () { return utils_4.countInstanceMethods; } });
241
259
  Object.defineProperty(exports, "countStaticMethods", { enumerable: true, get: function () { return utils_4.countStaticMethods; } });
242
260
  Object.defineProperty(exports, "debounceAction", { enumerable: true, get: function () { return utils_4.debounceAction; } });
261
+ Object.defineProperty(exports, "getClassDetails", { enumerable: true, get: function () { return utils_4.getClassDetails; } });
243
262
  Object.defineProperty(exports, "getInstanceMethodNames", { enumerable: true, get: function () { return utils_4.getInstanceMethodNames; } });
244
263
  Object.defineProperty(exports, "getInstanceMethodsCount", { enumerable: true, get: function () { return utils_4.countInstanceMethods; } });
245
264
  Object.defineProperty(exports, "getStaticMethodNames", { enumerable: true, get: function () { return utils_4.getStaticMethodNames; } });
246
265
  Object.defineProperty(exports, "getStaticMethodsCount", { enumerable: true, get: function () { return utils_4.countStaticMethods; } });
247
- Object.defineProperty(exports, "getClassDetails", { enumerable: true, get: function () { return utils_4.getClassDetails; } });
248
266
  Object.defineProperty(exports, "isDeepEqual", { enumerable: true, get: function () { return utils_4.isDeepEqual; } });
249
267
  Object.defineProperty(exports, "throttleAction", { enumerable: true, get: function () { return utils_4.throttleAction; } });
250
268
  // ! Primitive Type Guards
@@ -276,14 +294,14 @@ Object.defineProperty(exports, "isFunction", { enumerable: true, get: function (
276
294
  Object.defineProperty(exports, "isJSON", { enumerable: true, get: function () { return non_primitives_1.isJSON; } });
277
295
  Object.defineProperty(exports, "isJSONObject", { enumerable: true, get: function () { return non_primitives_1.isJSON; } });
278
296
  Object.defineProperty(exports, "isMap", { enumerable: true, get: function () { return non_primitives_1.isMap; } });
297
+ Object.defineProperty(exports, "isMethod", { enumerable: true, get: function () { return non_primitives_1.isMethodDescriptor; } });
298
+ Object.defineProperty(exports, "isMethodDescriptor", { enumerable: true, get: function () { return non_primitives_1.isMethodDescriptor; } });
279
299
  Object.defineProperty(exports, "isNotEmptyObject", { enumerable: true, get: function () { return non_primitives_1.isNotEmptyObject; } });
280
300
  Object.defineProperty(exports, "isObject", { enumerable: true, get: function () { return non_primitives_1.isObject; } });
281
301
  Object.defineProperty(exports, "isObjectEmpty", { enumerable: true, get: function () { return non_primitives_1.isEmptyObject; } });
282
302
  Object.defineProperty(exports, "isObjectWithKeys", { enumerable: true, get: function () { return non_primitives_1.isObjectWithKeys; } });
283
303
  Object.defineProperty(exports, "isPromise", { enumerable: true, get: function () { return non_primitives_1.isPromise; } });
284
304
  Object.defineProperty(exports, "isRegExp", { enumerable: true, get: function () { return non_primitives_1.isRegExp; } });
285
- Object.defineProperty(exports, "isMethodDescriptor", { enumerable: true, get: function () { return non_primitives_1.isMethodDescriptor; } });
286
- Object.defineProperty(exports, "isMethod", { enumerable: true, get: function () { return non_primitives_1.isMethodDescriptor; } });
287
305
  Object.defineProperty(exports, "isRegularExpression", { enumerable: true, get: function () { return non_primitives_1.isRegExp; } });
288
306
  Object.defineProperty(exports, "isReturningPromise", { enumerable: true, get: function () { return non_primitives_1.isReturningPromise; } });
289
307
  Object.defineProperty(exports, "isSet", { enumerable: true, get: function () { return non_primitives_1.isSet; } });
@@ -1,10 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.calculateLCM = exports.calculateHCF = exports.convertToDecimal = exports.getRandomNumber = void 0;
4
- exports.getFibonacciSeries = getFibonacciSeries;
5
4
  exports.sumDigits = sumDigits;
6
5
  exports.sumNumbers = sumNumbers;
7
6
  exports.reverseNumber = reverseNumber;
7
+ exports.getAverage = getAverage;
8
+ exports.getPercentage = getPercentage;
9
+ exports.getValueFromPercentage = getValueFromPercentage;
10
+ exports.getOriginalFromPercentage = getOriginalFromPercentage;
8
11
  const helpers_1 = require("./helpers");
9
12
  /**
10
13
  * * Utility to generate a random number between a given range.
@@ -70,9 +73,12 @@ exports.convertToDecimal = convertToDecimal;
70
73
  * @returns The HCF/GCD of all the provided numbers.
71
74
  */
72
75
  const calculateHCF = (...numbers) => {
73
- let hcf = numbers[0];
74
- for (let i = 1; i < numbers.length; i++) {
75
- hcf = (0, helpers_1._find2NumbersHCF)(hcf, numbers[i]);
76
+ const converted = numbers.map(Number);
77
+ if (converted.length === 0)
78
+ return 0;
79
+ let hcf = converted[0];
80
+ for (let i = 1; i < converted.length; i++) {
81
+ hcf = (0, helpers_1._find2NumbersHCF)(hcf, converted[i]);
76
82
  }
77
83
  return hcf;
78
84
  };
@@ -84,26 +90,16 @@ exports.calculateHCF = calculateHCF;
84
90
  * @returns The LCM/LCD of all the provided numbers.
85
91
  */
86
92
  const calculateLCM = (...numbers) => {
87
- let lcm = numbers[0];
88
- for (let i = 1; i < numbers.length; i++) {
89
- lcm = (0, helpers_1._find2NumbersLCM)(lcm, numbers[i]);
93
+ const converted = numbers.map(Number);
94
+ if (converted.length === 0)
95
+ return 0;
96
+ let lcm = converted[0];
97
+ for (let i = 1; i < converted.length; i++) {
98
+ lcm = (0, helpers_1._find2NumbersLCM)(lcm, converted[i]);
90
99
  }
91
100
  return lcm;
92
101
  };
93
102
  exports.calculateLCM = calculateLCM;
94
- /**
95
- * * Generates the first `n` Fibonacci numbers.
96
- *
97
- * @param n The number of Fibonacci numbers to generate.
98
- * @returns An array containing the first `n` Fibonacci numbers.
99
- */
100
- function getFibonacciSeries(n) {
101
- const series = [0, 1];
102
- for (let i = 2; i < n; i++) {
103
- series.push(series[i - 1] + series[i - 2]);
104
- }
105
- return series.slice(0, n);
106
- }
107
103
  /**
108
104
  * * Sums up all digits of a number.
109
105
  *
@@ -137,3 +133,73 @@ function reverseNumber(num) {
137
133
  const reversed = parseInt(Math.abs(Number(num)).toString().split('').reverse().join(''), 10);
138
134
  return Number(num) < 0 ? -reversed : reversed;
139
135
  }
136
+ /**
137
+ * * Calculates the average of a set of numbers.
138
+ *
139
+ * @param numbers - A list of numbers for which to calculate the average.
140
+ * @returns The average of the provided numbers. Returns `NaN` if no numbers are provided or if any invalid values are encountered.
141
+ */
142
+ function getAverage(...numbers) {
143
+ const cNumbers = numbers.map(Number);
144
+ // Edge case: check if the input is an empty array or contains invalid values
145
+ if (cNumbers.length === 0) {
146
+ return NaN; // Return NaN if no numbers are provided
147
+ }
148
+ // Validate each number in the array
149
+ const validNumbers = cNumbers.filter((num) => typeof num === 'number' && !isNaN(num));
150
+ // Edge case: check if the valid numbers array is empty after filtering
151
+ if (validNumbers.length === 0) {
152
+ return NaN; // Return NaN if no valid numbers are found
153
+ }
154
+ // Calculate the sum of the valid numbers
155
+ const sum = validNumbers.reduce((acc, curr) => acc + curr, 0);
156
+ // Return the average
157
+ return sum / validNumbers.length;
158
+ }
159
+ /**
160
+ * * Calculates the percentage of a number based on a given part and total.
161
+ *
162
+ * @param part - The part of the total value.
163
+ * @param total - The total value.
164
+ * @returns The percentage of the part in relation to the total, rounded to two decimal places.
165
+ * Returns `NaN` if the total is zero or invalid.
166
+ */
167
+ function getPercentage(part, total) {
168
+ if (total === 0 || !Number.isFinite(total) || !Number.isFinite(part)) {
169
+ return NaN; // Prevent division by zero or invalid values
170
+ }
171
+ return (part / total) * 100;
172
+ }
173
+ /**
174
+ * * Calculates the number that a given percentage corresponds to based on a total value.
175
+ *
176
+ * @param percentage - The percentage of the total value.
177
+ * @param total - The total value.
178
+ * @returns The number corresponding to the given percentage of the total, rounded to two decimal places.
179
+ * Returns `NaN` if the total is zero or invalid.
180
+ */
181
+ function getValueFromPercentage(percentage, total) {
182
+ if (total === 0 ||
183
+ !Number.isFinite(total) ||
184
+ !Number.isFinite(percentage)) {
185
+ return NaN; // Prevent division by zero or invalid values
186
+ }
187
+ return (percentage / 100) * total;
188
+ }
189
+ /**
190
+ * * Calculates the original number based on the given percentage and the corresponding value.
191
+ *
192
+ * @param percentage - The percentage value (e.g., 10 for 10%).
193
+ * @param percentageValue - The value corresponding to the given percentage.
194
+ * @returns The original number from which the percentage value is derived, or `NaN` if invalid inputs are provided.
195
+ */
196
+ function getOriginalFromPercentage(percentage, percentageValue) {
197
+ if (percentage === 0 ||
198
+ percentageValue === 0 ||
199
+ !Number.isFinite(percentage) ||
200
+ !Number.isFinite(percentageValue)) {
201
+ return NaN; // Prevent division by zero or invalid values
202
+ }
203
+ const original = (percentageValue / percentage) * 100;
204
+ return Math.round(original * 100) / 100;
205
+ }
@@ -9,7 +9,8 @@ const helpers_1 = require("./helpers");
9
9
  * @param number - The number to convert into words.
10
10
  * @returns The number converted in words.
11
11
  */
12
- function numberToWords(number) {
12
+ function numberToWords(num) {
13
+ let number = Number(num);
13
14
  const isNegative = number < 0;
14
15
  if (number === 0)
15
16
  return 'zero';
@@ -35,7 +36,8 @@ function numberToWords(number) {
35
36
  * @example convertToRomanNumerals(29) → "XXIX"
36
37
  */
37
38
  const convertToRomanNumerals = (num) => {
38
- if (num <= 0 || num >= 4000)
39
+ let number = Number(num);
40
+ if (number <= 0 || number >= 4000)
39
41
  throw new RangeError('Number must be between 1 and 3999');
40
42
  const romanMap = [
41
43
  [1000, 'M'],
@@ -54,9 +56,9 @@ const convertToRomanNumerals = (num) => {
54
56
  ];
55
57
  let result = '';
56
58
  for (const [value, numeral] of romanMap) {
57
- while (num >= value) {
59
+ while (number >= value) {
58
60
  result += numeral;
59
- num -= value;
61
+ number -= value;
60
62
  }
61
63
  }
62
64
  return result;
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getFibonacciSeries = getFibonacciSeries;
4
+ exports.getFibonacciSeriesMemo = getFibonacciSeriesMemo;
5
+ exports.fibonacciGenerator = fibonacciGenerator;
6
+ exports.getNthFibonacci = getNthFibonacci;
7
+ /**
8
+ * * Generates the first `limit` Fibonacci numbers.
9
+ *
10
+ * @param limit The number of Fibonacci numbers to generate.
11
+ * @returns An array containing the first `limit` Fibonacci numbers.
12
+ */
13
+ function getFibonacciSeries(limit) {
14
+ const cLimit = Number(limit);
15
+ if (!Number.isFinite(cLimit) || cLimit <= 0) {
16
+ return [];
17
+ }
18
+ if (cLimit === 1)
19
+ return [0];
20
+ const series = [0, 1];
21
+ for (let i = 2; i < cLimit; i++) {
22
+ series.push(series[i - 1] + series[i - 2]);
23
+ }
24
+ return series;
25
+ }
26
+ /**
27
+ * * Generates the first `limit` Fibonacci numbers using recursion with memoization.
28
+ *
29
+ * @param limit - The number of Fibonacci numbers to generate.
30
+ * @returns An array containing the first `limit` Fibonacci numbers.
31
+ */
32
+ function getFibonacciSeriesMemo(limit) {
33
+ const cLimit = Number(limit);
34
+ if (!Number.isFinite(cLimit) || cLimit <= 0)
35
+ return [];
36
+ if (cLimit === 1)
37
+ return [0];
38
+ const memo = new Map([
39
+ [0, 0],
40
+ [1, 1],
41
+ ]);
42
+ const fib = (n) => {
43
+ if (memo.has(n))
44
+ return memo.get(n);
45
+ const val = fib(n - 1) + fib(n - 2);
46
+ memo.set(n, val);
47
+ return val;
48
+ };
49
+ return Array.from({ length: cLimit }, (_, i) => fib(i));
50
+ }
51
+ /**
52
+ * * Generator function for Fibonacci sequence up to a given limit.
53
+ *
54
+ * @param limit - Number of Fibonacci numbers to generate.
55
+ * @param onYield - Optional callback triggered on each yield with the current value and index.
56
+ * @returns A generator yielding Fibonacci numbers one by one.
57
+ */
58
+ function* fibonacciGenerator(limit, onYield) {
59
+ const cLimit = Number(limit);
60
+ if (!Number.isFinite(cLimit) || cLimit < 0)
61
+ return;
62
+ let a = 0;
63
+ let b = 1;
64
+ for (let i = 0; i < cLimit; i++) {
65
+ onYield?.(a, i);
66
+ yield a;
67
+ [a, b] = [b, a + b];
68
+ }
69
+ }
70
+ /**
71
+ * * Calculates the `n`-th Fibonacci number using optimized space.
72
+ *
73
+ * @param index - The index (0-based) of the Fibonacci number.
74
+ * @returns The index=`n`-th Fibonacci number.
75
+ */
76
+ function getNthFibonacci(index) {
77
+ const n = Number(index);
78
+ if (!Number.isFinite(n) || n < 0)
79
+ return NaN;
80
+ if (n === 0)
81
+ return 0;
82
+ if (n === 1)
83
+ return 1;
84
+ let a = 0, b = 1;
85
+ for (let i = 2; i <= n; i++) {
86
+ [a, b] = [b, a + b];
87
+ }
88
+ return b;
89
+ }
@@ -9,7 +9,9 @@ const constants_1 = require("./constants");
9
9
  * @returns The number rounded to the nearest interval.
10
10
  * @example roundToNearest(27, 5) → 25
11
11
  */
12
- const roundToNearest = (value, interval = 5) => Math.round(value / interval) * interval;
12
+ const roundToNearest = (value, interval = 5) => {
13
+ return Math.round(Number(value) / interval) * interval;
14
+ };
13
15
  exports.roundToNearest = roundToNearest;
14
16
  /**
15
17
  * * Formats a number as a currency string.
@@ -39,7 +41,9 @@ exports.formatCurrency = formatCurrency;
39
41
  * @example clampNumber(5, 10, 20) → 10
40
42
  * @example clampNumber(25, 10, 20) → 20
41
43
  */
42
- const clampNumber = (value, min, max) => Math.max(min, Math.min(value, max));
44
+ const clampNumber = (value, min, max) => {
45
+ return Math.max(min, Math.min(value, max));
46
+ };
43
47
  exports.clampNumber = clampNumber;
44
48
  /**
45
49
  * * Generates a random floating-point number within a range.
@@ -49,7 +53,7 @@ exports.clampNumber = clampNumber;
49
53
  * @example randomFloat(1.5, 3.5) → 2.84623
50
54
  */
51
55
  const getRandomFloat = (min, max) => {
52
- return Math.random() * (max - min) + min;
56
+ return Math.random() * (Number(max) - Number(min)) + Number(min);
53
57
  };
54
58
  exports.getRandomFloat = getRandomFloat;
55
59
  /**
@@ -58,13 +62,13 @@ exports.getRandomFloat = getRandomFloat;
58
62
  * If the `withNumber` parameter is `true`, the function returns the number along with its ordinal suffix (e.g., "1st").
59
63
  * Otherwise, it returns only the ordinal suffix (e.g., "st").
60
64
  *
61
- * @param n - The number or number string to get the ordinal suffix for.
65
+ * @param num - The number or number string to get the ordinal suffix for.
62
66
  * @param withNumber - Whether to include the number along with its ordinal suffix (defaults to `true`).
63
67
  * @returns The appropriate ordinal suffix, optionally with the number (e.g., '1st' or 'st`, '2nd' or 'nd' and so on.).
64
68
  */
65
- const getOrdinal = (n, withNumber = true) => {
66
- const remainder10 = Number(n) % 10;
67
- const remainder100 = Number(n) % 100;
69
+ const getOrdinal = (num, withNumber = true) => {
70
+ const remainder10 = Number(num) % 10;
71
+ const remainder100 = Number(num) % 100;
68
72
  let suffix;
69
73
  if (remainder10 === 1 && remainder100 !== 11) {
70
74
  suffix = 'st';
@@ -78,6 +82,6 @@ const getOrdinal = (n, withNumber = true) => {
78
82
  else {
79
83
  suffix = 'th';
80
84
  }
81
- return withNumber ? String(n).concat(suffix) : suffix;
85
+ return withNumber ? String(num).concat(suffix) : suffix;
82
86
  };
83
87
  exports.getOrdinal = getOrdinal;
@@ -122,7 +122,7 @@ export declare class Chronos {
122
122
  get isoWeekday(): number;
123
123
  /** Gets ISO month (1–12 instead of 0–11) */
124
124
  get isoMonth(): number;
125
- /** Gets the time value in milliseconds since midnight, January 1, 1970 UTC. */
125
+ /** Gets the time value in seconds since midnight, January 1, 1970 UTC. */
126
126
  get unix(): number;
127
127
  /** Gets the time value in milliseconds since midnight, January 1, 1970 UTC. */
128
128
  get timestamp(): number;
@@ -303,6 +303,28 @@ export declare class Chronos {
303
303
  * - `weekendLength` defines how many days are considered weekend (1 or 2). Default is 2.
304
304
  */
305
305
  isWorkday(weekStartsOn?: number, weekendLength?: 1 | 2): boolean;
306
+ /**
307
+ * @instance Checks if the current date and time fall within business hours.
308
+ *
309
+ * @param businessStartHour Optional starting hour of business time (0–23). Defaults to `9` (9 AM).
310
+ * @param businessEndHour Optional ending hour of business time (0–23). Defaults to `17` (5 PM).
311
+ * @param weekStartsOn Optional day the week starts on (0–6). Default is `0` (Sunday).
312
+ * @param weekendLength Optional weekend length (1 or 2). Default is `2`.
313
+ *
314
+ * @returns Whether the current time is within business hours.
315
+ *
316
+ * @remarks
317
+ * * Business hours are typically 9 AM to 5 PM on weekdays.
318
+ * * Supports standard and overnight business hours. Overnight means `end < start`.
319
+ * * Example: `businessStartHour = 22`, `businessEndHour = 6` will cover 10 PM to 6 AM next day.
320
+ *
321
+ * * *Weekends are determined by `weekStartsOn` and `weekendLength` using the `isWeekend()` method.*
322
+ *
323
+ * - Business hours are `[businessStartHour, businessEndHour)`.
324
+ * - If `weekendLength` is `1`, only the last day of the week is treated as weekend.
325
+ * - If `weekendLength` is `2`, the last two days are treated as weekend.
326
+ */
327
+ isBusinessHour(businessStartHour?: number, businessEndHour?: number, weekStartsOn?: number, weekendLength?: 1 | 2): boolean;
306
328
  /**
307
329
  * @instance Checks if the current date is a palindrome in either padded or non-padded format.
308
330
  *
@@ -594,6 +616,15 @@ export declare class Chronos {
594
616
  * @throws `Error` If the date string does not match the format.
595
617
  */
596
618
  static parse(dateStr: string, format: string): Chronos;
619
+ /**
620
+ * * Rounds the current date-time to the nearest specified unit and interval.
621
+ *
622
+ * @param unit - The unit to round (`year`, `month`, `week`, `day`, `hour`, `minute`, `second`, `millisecond`).
623
+ *
624
+ * @param nearest - The interval to round to. Defaults to `1`.
625
+ * @returns A new `Chronos` instance with the rounded value. For wrong unit returns current instance. Rounded *Month and Week are 0 based.*
626
+ */
627
+ round(unit: TimeUnit, nearest?: number): Chronos;
597
628
  /**
598
629
  * @static Returns the current date and time in a specified format in local time.
599
630
  * * Default format is dd, `mmm DD, YYYY HH:mm:ss` = `Sun, Apr 06, 2025 16:11:55`