@cityssm/utils-datetime 0.2.0 → 1.1.0

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.
Files changed (47) hide show
  1. package/README.md +1 -1
  2. package/dateIntegerToDate.js +5 -7
  3. package/dateIntegerToDate.ts +12 -10
  4. package/dateIntegerToString.d.ts +2 -1
  5. package/dateIntegerToString.js +2 -4
  6. package/dateIntegerToString.ts +11 -9
  7. package/dateStringToDate.d.ts +2 -1
  8. package/dateStringToDate.ts +10 -2
  9. package/dateStringToInteger.d.ts +2 -1
  10. package/dateStringToInteger.ts +7 -1
  11. package/dateTimeTypes.d.ts +3 -0
  12. package/dateTimeTypes.js +1 -0
  13. package/dateTimeTypes.ts +14 -0
  14. package/dateToInteger.ts +5 -0
  15. package/dateToString.d.ts +2 -1
  16. package/dateToString.ts +9 -2
  17. package/dateToTimeInteger.ts +5 -0
  18. package/dateToTimePeriodString.d.ts +2 -2
  19. package/dateToTimePeriodString.js +0 -1
  20. package/dateToTimePeriodString.ts +8 -3
  21. package/dateToTimeString.d.ts +2 -1
  22. package/dateToTimeString.ts +9 -2
  23. package/index.d.ts +13 -0
  24. package/index.js +12 -0
  25. package/index.ts +21 -0
  26. package/isValidDateInteger.d.ts +1 -0
  27. package/isValidDateInteger.js +5 -0
  28. package/isValidDateInteger.ts +12 -0
  29. package/isValidDateString.d.ts +1 -0
  30. package/isValidDateString.js +6 -0
  31. package/isValidDateString.ts +14 -0
  32. package/isValidTimeInteger.d.ts +1 -0
  33. package/isValidTimeInteger.js +6 -0
  34. package/isValidTimeInteger.ts +13 -0
  35. package/isValidTimeString.d.ts +1 -0
  36. package/isValidTimeString.js +6 -0
  37. package/isValidTimeString.ts +14 -0
  38. package/package.json +5 -9
  39. package/timeIntegerToPeriodString.d.ts +2 -2
  40. package/timeIntegerToPeriodString.js +0 -1
  41. package/timeIntegerToPeriodString.ts +9 -3
  42. package/timeIntegerToString.d.ts +2 -1
  43. package/timeIntegerToString.js +2 -2
  44. package/timeIntegerToString.ts +13 -3
  45. package/timeStringToInteger.d.ts +2 -2
  46. package/timeStringToInteger.js +1 -2
  47. package/timeStringToInteger.ts +8 -3
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # node-utils-datetime
2
2
 
3
3
  [![npm (scoped)](https://img.shields.io/npm/v/@cityssm/utils-datetime)](https://www.npmjs.com/package/@cityssm/utils-datetime)
4
- [![Codacy Badge](https://app.codacy.com/project/badge/Grade/06418cae779f4c2c9657136dd60c0809)](https://app.codacy.com/gh/cityssm/node-utils-datetime/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
4
+ [![DeepSource](https://app.deepsource.com/gh/cityssm/node-utils-datetime.svg/?label=active+issues&show_trend=true&token=Qxl72G0xqdKZdqcKOm8Jg-Dt)](https://app.deepsource.com/gh/cityssm/node-utils-datetime/)
5
5
  [![Maintainability](https://api.codeclimate.com/v1/badges/6f6f8ed35487ab5f36a5/maintainability)](https://codeclimate.com/github/cityssm/node-utils-datetime/maintainability)
6
6
  [![codecov](https://codecov.io/gh/cityssm/node-utils-datetime/branch/main/graph/badge.svg?token=3E8VHNL34S)](https://codecov.io/gh/cityssm/node-utils-datetime)
7
7
 
@@ -1,11 +1,9 @@
1
+ import { isValidDateInteger } from './isValidDateInteger.js';
1
2
  export function dateIntegerToDate(dateInteger, timeInteger = 0) {
2
- if (dateInteger === null ||
3
- dateInteger === undefined ||
4
- Number.isNaN(dateInteger) ||
5
- dateInteger === 0) {
6
- return;
3
+ if (!isValidDateInteger(dateInteger)) {
4
+ return undefined;
7
5
  }
8
- const dateString = ('00000000' + dateInteger.toString()).slice(-8);
9
- const timeString = ('0000' + (timeInteger ?? 0).toString()).slice(-4);
6
+ const dateString = `00000000${dateInteger.toString()}`.slice(-8);
7
+ const timeString = `0000${(timeInteger ?? 0).toString()}`.slice(-4);
10
8
  return new Date(Number.parseInt(dateString.slice(0, 4), 10), Number.parseInt(dateString.slice(4, 6), 10) - 1, Number.parseInt(dateString.slice(6, 8), 10), Number.parseInt(timeString.slice(0, 2), 10), Number.parseInt(timeString.slice(2, 4), 10));
11
9
  }
@@ -1,3 +1,5 @@
1
+ import { isValidDateInteger } from './isValidDateInteger.js'
2
+
1
3
  export function dateIntegerToDate(
2
4
  dateInteger: number,
3
5
  timeInteger?: number
@@ -7,22 +9,22 @@ export function dateIntegerToDate(
7
9
  timeInteger?: number
8
10
  ): undefined
9
11
 
12
+ /**
13
+ * @param {number | undefined | null} dateInteger - A number representing a date (ex. 20241231)
14
+ * @param {number} timeInteger - A number representing a time (ex. 2359)
15
+ * @returns {Date | undefined} - A Date object (ex. '2024-12-31 23:59')
16
+ */
10
17
  export function dateIntegerToDate(
11
18
  dateInteger: number | undefined | null,
12
- timeInteger = 0
19
+ timeInteger: number | undefined | null = 0
13
20
  ): Date | undefined {
14
- if (
15
- dateInteger === null ||
16
- dateInteger === undefined ||
17
- Number.isNaN(dateInteger) ||
18
- dateInteger === 0
19
- ) {
20
- return
21
+ if (!isValidDateInteger(dateInteger)) {
22
+ return undefined
21
23
  }
22
24
 
23
- const dateString = ('00000000' + dateInteger.toString()).slice(-8)
25
+ const dateString = `00000000${(dateInteger as number).toString()}`.slice(-8)
24
26
 
25
- const timeString = ('0000' + (timeInteger ?? 0).toString()).slice(-4)
27
+ const timeString = `0000${(timeInteger ?? 0).toString()}`.slice(-4)
26
28
 
27
29
  return new Date(
28
30
  Number.parseInt(dateString.slice(0, 4), 10),
@@ -1,2 +1,3 @@
1
- export declare function dateIntegerToString(dateInteger: number): string;
1
+ import type { DateString } from './dateTimeTypes.js';
2
+ export declare function dateIntegerToString(dateInteger: number): DateString;
2
3
  export declare function dateIntegerToString(dateInteger: null | undefined | 0): '';
@@ -1,10 +1,8 @@
1
1
  import { dateIntegerToDate } from './dateIntegerToDate.js';
2
2
  import { dateToString } from './dateToString.js';
3
+ import { isValidDateInteger } from './isValidDateInteger.js';
3
4
  export function dateIntegerToString(dateInteger) {
4
- if (dateInteger === null ||
5
- dateInteger === undefined ||
6
- Number.isNaN(dateInteger) ||
7
- dateInteger === 0) {
5
+ if (!isValidDateInteger(dateInteger)) {
8
6
  return '';
9
7
  }
10
8
  return dateToString(dateIntegerToDate(dateInteger));
@@ -1,20 +1,22 @@
1
1
  import { dateIntegerToDate } from './dateIntegerToDate.js'
2
+ import type { DateString } from './dateTimeTypes.js'
2
3
  import { dateToString } from './dateToString.js'
4
+ import { isValidDateInteger } from './isValidDateInteger.js'
3
5
 
4
- export function dateIntegerToString(dateInteger: number): string
6
+ export function dateIntegerToString(dateInteger: number): DateString
5
7
  export function dateIntegerToString(dateInteger: null | undefined | 0): ''
6
8
 
9
+ /**
10
+ * Formats a date number as a string.
11
+ * @param {number | undefined | null} dateInteger - A number representing a date.
12
+ * @returns {DateString | ''} - A string representing a date.
13
+ */
7
14
  export function dateIntegerToString(
8
15
  dateInteger: number | undefined | null
9
- ): string | undefined {
10
- if (
11
- dateInteger === null ||
12
- dateInteger === undefined ||
13
- Number.isNaN(dateInteger) ||
14
- dateInteger === 0
15
- ) {
16
+ ): DateString | '' {
17
+ if (!isValidDateInteger(dateInteger)) {
16
18
  return ''
17
19
  }
18
20
 
19
- return dateToString(dateIntegerToDate(dateInteger))
21
+ return dateToString(dateIntegerToDate(dateInteger as number))
20
22
  }
@@ -1 +1,2 @@
1
- export declare function dateStringToDate(dateString: string, timeString?: string): Date;
1
+ import type { DateString, TimeString } from './dateTimeTypes.js';
2
+ export declare function dateStringToDate(dateString: DateString, timeString?: TimeString): Date;
@@ -1,6 +1,14 @@
1
+ import type { DateString, TimeString } from './dateTimeTypes.js'
2
+
3
+ /**
4
+ * Formats a string date and time as a JavaScript Date object.
5
+ * @param {DateString} dateString - A string representing a date.
6
+ * @param {TimeString} timeString - A string representing a time.
7
+ * @returns {Date} - A JavaScript Date object.
8
+ */
1
9
  export function dateStringToDate(
2
- dateString: string,
3
- timeString = '00:00'
10
+ dateString: DateString,
11
+ timeString: TimeString = '00:00'
4
12
  ): Date {
5
13
  const datePieces = dateString.split('-')
6
14
  const timePieces = timeString.split(':')
@@ -1 +1,2 @@
1
- export declare function dateStringToInteger(dateString: string): number;
1
+ import type { DateString } from './dateTimeTypes.js';
2
+ export declare function dateStringToInteger(dateString: DateString): number;
@@ -1,6 +1,12 @@
1
1
  import { dateStringToDate } from './dateStringToDate.js'
2
+ import type { DateString } from './dateTimeTypes.js'
2
3
  import { dateToInteger } from './dateToInteger.js'
3
4
 
4
- export function dateStringToInteger(dateString: string): number {
5
+ /**
6
+ * Formats a date string as a number.
7
+ * @param {DateString} dateString - A date formatted as a string (ex. '2024-12-31')
8
+ * @returns {number} - A number representing a date.
9
+ */
10
+ export function dateStringToInteger(dateString: DateString): number {
5
11
  return dateToInteger(dateStringToDate(dateString))
6
12
  }
@@ -0,0 +1,3 @@
1
+ export type DateString = `${number}-${number}-${number}`;
2
+ export type TimeString = `${number}:${number}`;
3
+ export type TimePeriodString = `${number}:${number} ${'a.m.' | 'p.m.'}`;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,14 @@
1
+ /**
2
+ * yyyy-mm-dd
3
+ */
4
+ export type DateString = `${number}-${number}-${number}`
5
+
6
+ /**
7
+ * hh:mm
8
+ */
9
+ export type TimeString = `${number}:${number}`
10
+
11
+ /**
12
+ * h:mm a.m. | h:mm p.m.
13
+ */
14
+ export type TimePeriodString = `${number}:${number} ${'a.m.' | 'p.m.'}`
package/dateToInteger.ts CHANGED
@@ -1,3 +1,8 @@
1
+ /**
2
+ * Formats a JavaScript Date object as a number.
3
+ * @param {Date} dateObject - A JavaScript Date object.
4
+ * @returns {number} - A number representing the date.
5
+ */
1
6
  export function dateToInteger(dateObject: Date): number {
2
7
  return (
3
8
  dateObject.getFullYear() * 10_000 +
package/dateToString.d.ts CHANGED
@@ -1 +1,2 @@
1
- export declare function dateToString(dateObject: Date): string;
1
+ import type { DateString } from './dateTimeTypes.js';
2
+ export declare function dateToString(dateObject: Date): DateString;
package/dateToString.ts CHANGED
@@ -1,7 +1,14 @@
1
- export function dateToString(dateObject: Date): string {
1
+ import type { DateString } from './dateTimeTypes.js'
2
+
3
+ /**
4
+ * Formats a JavaScript Date object as a date string.
5
+ * @param {Date} dateObject - A JavaScript Date object
6
+ * @returns {DateString} A date string.
7
+ */
8
+ export function dateToString(dateObject: Date): DateString {
2
9
  return Intl.DateTimeFormat('fr-CA', {
3
10
  year: 'numeric',
4
11
  month: '2-digit',
5
12
  day: '2-digit'
6
- }).format(dateObject)
13
+ }).format(dateObject) as DateString
7
14
  }
@@ -1,3 +1,8 @@
1
+ /**
2
+ * Formats the time in a JavaScript Date as a number.
3
+ * @param {Date} dateObject - A JavaString Date object.
4
+ * @returns {number} - A number representing a time.
5
+ */
1
6
  export function dateToTimeInteger(dateObject: Date): number {
2
7
  return dateObject.getHours() * 100 + dateObject.getMinutes()
3
8
  }
@@ -1,2 +1,2 @@
1
- import 'core-js';
2
- export declare function dateToTimePeriodString(dateObject: Date): string;
1
+ import type { TimePeriodString } from './dateTimeTypes.js';
2
+ export declare function dateToTimePeriodString(dateObject: Date): TimePeriodString;
@@ -1,4 +1,3 @@
1
- import 'core-js';
2
1
  export function dateToTimePeriodString(dateObject) {
3
2
  return Intl.DateTimeFormat('en-CA', {
4
3
  hourCycle: 'h12',
@@ -1,11 +1,16 @@
1
- import 'core-js'
1
+ import type { TimePeriodString } from './dateTimeTypes.js'
2
2
 
3
- export function dateToTimePeriodString(dateObject: Date): string {
3
+ /**
4
+ * Formats a JavaScript Date as a time period string.
5
+ * @param {Date} dateObject - A JavaScript Date object.
6
+ * @returns {TimePeriodString} - A time string formatted with the time period (ex. 1:23 a.m.)
7
+ */
8
+ export function dateToTimePeriodString(dateObject: Date): TimePeriodString {
4
9
  return Intl.DateTimeFormat('en-CA', {
5
10
  hourCycle: 'h12',
6
11
  hour: 'numeric',
7
12
  minute: '2-digit'
8
13
  })
9
14
  .format(dateObject)
10
- .replaceAll('\u202F', ' ')
15
+ .replaceAll('\u202F', ' ') as TimePeriodString
11
16
  }
@@ -1 +1,2 @@
1
- export declare function dateToTimeString(dateObject: Date): string;
1
+ import type { TimeString } from './dateTimeTypes.js';
2
+ export declare function dateToTimeString(dateObject: Date): TimeString;
@@ -1,7 +1,14 @@
1
- export function dateToTimeString(dateObject: Date): string {
1
+ import type { TimeString } from './dateTimeTypes.js'
2
+
3
+ /**
4
+ * Formats a JavaScript Date object as a time string.
5
+ * @param {Date} dateObject - A JavaScript Date object.
6
+ * @returns {TimeString} - A string representing the time.
7
+ */
8
+ export function dateToTimeString(dateObject: Date): TimeString {
2
9
  return Intl.DateTimeFormat('en-CA', {
3
10
  hourCycle: 'h24',
4
11
  hour: '2-digit',
5
12
  minute: '2-digit'
6
- }).format(dateObject)
13
+ }).format(dateObject) as TimeString
7
14
  }
package/index.d.ts CHANGED
@@ -7,6 +7,10 @@ import { dateToString } from './dateToString.js';
7
7
  import { dateToTimeInteger } from './dateToTimeInteger.js';
8
8
  import { dateToTimePeriodString } from './dateToTimePeriodString.js';
9
9
  import { dateToTimeString } from './dateToTimeString.js';
10
+ import { isValidDateInteger } from './isValidDateInteger.js';
11
+ import { isValidDateString } from './isValidDateString.js';
12
+ import { isValidTimeInteger } from './isValidTimeInteger.js';
13
+ import { isValidTimeString } from './isValidTimeString.js';
10
14
  import { timeIntegerToPeriodString } from './timeIntegerToPeriodString.js';
11
15
  import { timeIntegerToString } from './timeIntegerToString.js';
12
16
  import { timeStringToInteger } from './timeStringToInteger.js';
@@ -24,6 +28,11 @@ export { dateToTimePeriodString } from './dateToTimePeriodString.js';
24
28
  export { timeIntegerToString } from './timeIntegerToString.js';
25
29
  export { timeIntegerToPeriodString } from './timeIntegerToPeriodString.js';
26
30
  export { timeStringToInteger } from './timeStringToInteger.js';
31
+ export type { DateString, TimeString, TimePeriodString } from './dateTimeTypes.js';
32
+ export { isValidDateInteger } from './isValidDateInteger.js';
33
+ export { isValidDateString } from './isValidDateString.js';
34
+ export { isValidTimeInteger } from './isValidTimeInteger.js';
35
+ export { isValidTimeString } from './isValidTimeString.js';
27
36
  declare const _default: {
28
37
  months: string[];
29
38
  days: string[];
@@ -36,6 +45,10 @@ declare const _default: {
36
45
  dateToTimeInteger: typeof dateToTimeInteger;
37
46
  dateToTimeString: typeof dateToTimeString;
38
47
  dateToTimePeriodString: typeof dateToTimePeriodString;
48
+ isValidDateInteger: typeof isValidDateInteger;
49
+ isValidDateString: typeof isValidDateString;
50
+ isValidTimeInteger: typeof isValidTimeInteger;
51
+ isValidTimeString: typeof isValidTimeString;
39
52
  timeIntegerToString: typeof timeIntegerToString;
40
53
  timeIntegerToPeriodString: typeof timeIntegerToPeriodString;
41
54
  timeStringToInteger: typeof timeStringToInteger;
package/index.js CHANGED
@@ -7,6 +7,10 @@ import { dateToString } from './dateToString.js';
7
7
  import { dateToTimeInteger } from './dateToTimeInteger.js';
8
8
  import { dateToTimePeriodString } from './dateToTimePeriodString.js';
9
9
  import { dateToTimeString } from './dateToTimeString.js';
10
+ import { isValidDateInteger } from './isValidDateInteger.js';
11
+ import { isValidDateString } from './isValidDateString.js';
12
+ import { isValidTimeInteger } from './isValidTimeInteger.js';
13
+ import { isValidTimeString } from './isValidTimeString.js';
10
14
  import { timeIntegerToPeriodString } from './timeIntegerToPeriodString.js';
11
15
  import { timeIntegerToString } from './timeIntegerToString.js';
12
16
  import { timeStringToInteger } from './timeStringToInteger.js';
@@ -45,6 +49,10 @@ export { dateToTimePeriodString } from './dateToTimePeriodString.js';
45
49
  export { timeIntegerToString } from './timeIntegerToString.js';
46
50
  export { timeIntegerToPeriodString } from './timeIntegerToPeriodString.js';
47
51
  export { timeStringToInteger } from './timeStringToInteger.js';
52
+ export { isValidDateInteger } from './isValidDateInteger.js';
53
+ export { isValidDateString } from './isValidDateString.js';
54
+ export { isValidTimeInteger } from './isValidTimeInteger.js';
55
+ export { isValidTimeString } from './isValidTimeString.js';
48
56
  export default {
49
57
  months,
50
58
  days,
@@ -57,6 +65,10 @@ export default {
57
65
  dateToTimeInteger,
58
66
  dateToTimeString,
59
67
  dateToTimePeriodString,
68
+ isValidDateInteger,
69
+ isValidDateString,
70
+ isValidTimeInteger,
71
+ isValidTimeString,
60
72
  timeIntegerToString,
61
73
  timeIntegerToPeriodString,
62
74
  timeStringToInteger
package/index.ts CHANGED
@@ -7,6 +7,10 @@ import { dateToString } from './dateToString.js'
7
7
  import { dateToTimeInteger } from './dateToTimeInteger.js'
8
8
  import { dateToTimePeriodString } from './dateToTimePeriodString.js'
9
9
  import { dateToTimeString } from './dateToTimeString.js'
10
+ import { isValidDateInteger } from './isValidDateInteger.js'
11
+ import { isValidDateString } from './isValidDateString.js'
12
+ import { isValidTimeInteger } from './isValidTimeInteger.js'
13
+ import { isValidTimeString } from './isValidTimeString.js'
10
14
  import { timeIntegerToPeriodString } from './timeIntegerToPeriodString.js'
11
15
  import { timeIntegerToString } from './timeIntegerToString.js'
12
16
  import { timeStringToInteger } from './timeStringToInteger.js'
@@ -68,6 +72,19 @@ export { timeIntegerToPeriodString } from './timeIntegerToPeriodString.js'
68
72
  // From Time String
69
73
  export { timeStringToInteger } from './timeStringToInteger.js'
70
74
 
75
+ // Types
76
+ export type {
77
+ DateString,
78
+ TimeString,
79
+ TimePeriodString
80
+ } from './dateTimeTypes.js'
81
+
82
+ // Validators
83
+ export { isValidDateInteger } from './isValidDateInteger.js'
84
+ export { isValidDateString } from './isValidDateString.js'
85
+ export { isValidTimeInteger } from './isValidTimeInteger.js'
86
+ export { isValidTimeString } from './isValidTimeString.js'
87
+
71
88
  export default {
72
89
  months,
73
90
  days,
@@ -80,6 +97,10 @@ export default {
80
97
  dateToTimeInteger,
81
98
  dateToTimeString,
82
99
  dateToTimePeriodString,
100
+ isValidDateInteger,
101
+ isValidDateString,
102
+ isValidTimeInteger,
103
+ isValidTimeString,
83
104
  timeIntegerToString,
84
105
  timeIntegerToPeriodString,
85
106
  timeStringToInteger
@@ -0,0 +1 @@
1
+ export declare function isValidDateInteger(possibleDateInteger: unknown): boolean;
@@ -0,0 +1,5 @@
1
+ export function isValidDateInteger(possibleDateInteger) {
2
+ return (typeof possibleDateInteger === 'number' &&
3
+ possibleDateInteger >= 101 &&
4
+ possibleDateInteger % 1 === 0);
5
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Determines if a number is a valid date number.
3
+ * @param {unknown} possibleDateInteger - A possible date number
4
+ * @returns {boolean} - True if the possible date integer is valid.
5
+ */
6
+ export function isValidDateInteger(possibleDateInteger: unknown): boolean {
7
+ return (
8
+ typeof possibleDateInteger === 'number' &&
9
+ possibleDateInteger >= 101 &&
10
+ possibleDateInteger % 1 === 0
11
+ )
12
+ }
@@ -0,0 +1 @@
1
+ export declare function isValidDateString(possibleDateString: unknown): boolean;
@@ -0,0 +1,6 @@
1
+ const dateStringRegex = /^\d{4}-[01]\d-[0-3]\d$/;
2
+ export function isValidDateString(possibleDateString) {
3
+ return (typeof possibleDateString === 'string' &&
4
+ (possibleDateString ?? '').length === 10 &&
5
+ dateStringRegex.test(possibleDateString));
6
+ }
@@ -0,0 +1,14 @@
1
+ const dateStringRegex = /^\d{4}-[01]\d-[0-3]\d$/
2
+
3
+ /**
4
+ * Determines if a string is a valid date string.
5
+ * @param {unknown} possibleDateString - A possible date string
6
+ * @returns {boolean} - True when the possible date string is valid
7
+ */
8
+ export function isValidDateString(possibleDateString: unknown): boolean {
9
+ return (
10
+ typeof possibleDateString === 'string' &&
11
+ (possibleDateString ?? '').length === 10 &&
12
+ dateStringRegex.test(possibleDateString)
13
+ )
14
+ }
@@ -0,0 +1 @@
1
+ export declare function isValidTimeInteger(possibleTimeInteger: unknown): boolean;
@@ -0,0 +1,6 @@
1
+ export function isValidTimeInteger(possibleTimeInteger) {
2
+ return (typeof possibleTimeInteger === 'number' &&
3
+ possibleTimeInteger >= 0 &&
4
+ possibleTimeInteger <= 2359 &&
5
+ possibleTimeInteger % 1 === 0);
6
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Determines if a number is a valid time number.
3
+ * @param {unknown} possibleTimeInteger - A possible time number
4
+ * @returns {boolean} - True if the possible time integer is valid.
5
+ */
6
+ export function isValidTimeInteger(possibleTimeInteger: unknown): boolean {
7
+ return (
8
+ typeof possibleTimeInteger === 'number' &&
9
+ possibleTimeInteger >= 0 &&
10
+ possibleTimeInteger <= 2359 &&
11
+ possibleTimeInteger % 1 === 0
12
+ )
13
+ }
@@ -0,0 +1 @@
1
+ export declare function isValidTimeString(possibleTimeString: unknown): boolean;
@@ -0,0 +1,6 @@
1
+ const timeStringRegex = /^[01]\d:[0-5]\d$/;
2
+ export function isValidTimeString(possibleTimeString) {
3
+ return (typeof possibleTimeString === 'string' &&
4
+ (possibleTimeString ?? '').length === 5 &&
5
+ timeStringRegex.test(possibleTimeString));
6
+ }
@@ -0,0 +1,14 @@
1
+ const timeStringRegex = /^[01]\d:[0-5]\d$/
2
+
3
+ /**
4
+ * Determines if a string is a valid time string.
5
+ * @param {unknown} possibleTimeString - A possible time string.
6
+ * @returns {boolean} - True when the possible time string is valid.
7
+ */
8
+ export function isValidTimeString(possibleTimeString: unknown): boolean {
9
+ return (
10
+ typeof possibleTimeString === 'string' &&
11
+ (possibleTimeString ?? '').length === 5 &&
12
+ timeStringRegex.test(possibleTimeString)
13
+ )
14
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cityssm/utils-datetime",
3
- "version": "0.2.0",
3
+ "version": "1.1.0",
4
4
  "description": "Date time utilities for Node.js applications",
5
5
  "keywords": [
6
6
  "date",
@@ -9,7 +9,7 @@
9
9
  ],
10
10
  "type": "module",
11
11
  "engines": {
12
- "node": "^14.13.1 || >=16.0.0"
12
+ "node": ">=18.0.0"
13
13
  },
14
14
  "homepage": "https://github.com/cityssm/node-utils-datetime#readme",
15
15
  "bugs": {
@@ -31,12 +31,8 @@
31
31
  "author": "The Corporation of the City of Sault Ste. Marie",
32
32
  "license": "MIT",
33
33
  "devDependencies": {
34
- "@types/core-js": "^2.5.6",
35
- "@types/mocha": "^10.0.2",
36
- "@types/node": "^20.8.6",
37
- "eslint-config-cityssm": "^0.5.1"
38
- },
39
- "dependencies": {
40
- "core-js": "^3.33.0"
34
+ "@types/mocha": "^10.0.6",
35
+ "@types/node": "^20.11.19",
36
+ "eslint-config-cityssm": "^1.4.1"
41
37
  }
42
38
  }
@@ -1,2 +1,2 @@
1
- import 'core-js';
2
- export declare function timeIntegerToPeriodString(timeInteger: number): string;
1
+ import type { TimePeriodString } from './dateTimeTypes.js';
2
+ export declare function timeIntegerToPeriodString(timeInteger: number): TimePeriodString;
@@ -1,4 +1,3 @@
1
- import 'core-js';
2
1
  import { dateIntegerToDate } from './dateIntegerToDate.js';
3
2
  import { dateToTimePeriodString } from './dateToTimePeriodString.js';
4
3
  export function timeIntegerToPeriodString(timeInteger) {
@@ -1,9 +1,15 @@
1
- import 'core-js'
2
-
3
1
  import { dateIntegerToDate } from './dateIntegerToDate.js'
2
+ import type { TimePeriodString } from './dateTimeTypes.js'
4
3
  import { dateToTimePeriodString } from './dateToTimePeriodString.js'
5
4
 
6
- export function timeIntegerToPeriodString(timeInteger: number): string {
5
+ /**
6
+ * Formats a time represented as a number as a string.
7
+ * @param {number} timeInteger - A number representing a time.
8
+ * @returns {TimePeriodString} - A string representing a time.
9
+ */
10
+ export function timeIntegerToPeriodString(
11
+ timeInteger: number
12
+ ): TimePeriodString {
7
13
  // eslint-disable-next-line unicorn/numeric-separators-style
8
14
  return dateToTimePeriodString(dateIntegerToDate(19700101, timeInteger))
9
15
  }
@@ -1 +1,2 @@
1
- export declare function timeIntegerToString(timeInteger: number | undefined | null): string;
1
+ import type { TimeString } from './dateTimeTypes.js';
2
+ export declare function timeIntegerToString(timeInteger: number | undefined | null): TimeString;
@@ -1,4 +1,4 @@
1
1
  export function timeIntegerToString(timeInteger) {
2
- const timeString = ('0000' + (timeInteger ?? 0).toString()).slice(-4);
3
- return timeString.slice(0, 2) + ':' + timeString.slice(2, 4);
2
+ const timeString = `0000${(timeInteger ?? 0).toString()}`.slice(-4);
3
+ return `${timeString.slice(0, 2)}:${timeString.slice(2, 4)}`;
4
4
  }
@@ -1,4 +1,14 @@
1
- export function timeIntegerToString(timeInteger: number | undefined | null): string {
2
- const timeString = ('0000' + (timeInteger ?? 0).toString()).slice(-4)
3
- return timeString.slice(0, 2) + ':' + timeString.slice(2, 4)
1
+ import type { TimeString } from './dateTimeTypes.js'
2
+
3
+ /**
4
+ * Formats a number representing a time as a string.
5
+ * @param {number} timeInteger - A number representing a time.
6
+ * @returns {TimeString} - A string representing a time.
7
+ */
8
+ export function timeIntegerToString(
9
+ timeInteger: number | undefined | null
10
+ ): TimeString {
11
+ const timeString = `0000${(timeInteger ?? 0).toString()}`.slice(-4)
12
+
13
+ return `${timeString.slice(0, 2)}:${timeString.slice(2, 4)}` as TimeString
4
14
  }
@@ -1,2 +1,2 @@
1
- import 'core-js';
2
- export declare function timeStringToInteger(timeString: string): number;
1
+ import type { TimeString } from './dateTimeTypes.js';
2
+ export declare function timeStringToInteger(timeString: TimeString): number;
@@ -1,4 +1,3 @@
1
- import 'core-js';
2
1
  export function timeStringToInteger(timeString) {
3
- return Number.parseInt(('0' + timeString).replaceAll(':', ''), 10);
2
+ return Number.parseInt(`0${timeString}`.replaceAll(':', ''), 10);
4
3
  }
@@ -1,5 +1,10 @@
1
- import 'core-js'
1
+ import type { TimeString } from './dateTimeTypes.js'
2
2
 
3
- export function timeStringToInteger(timeString: string): number {
4
- return Number.parseInt(('0' + timeString).replaceAll(':', ''), 10)
3
+ /**
4
+ * Formats a string representing a time as a number.
5
+ * @param {TimeString} timeString - A string representing a time.
6
+ * @returns {number} - A number representing a time.
7
+ */
8
+ export function timeStringToInteger(timeString: TimeString): number {
9
+ return Number.parseInt(`0${timeString}`.replaceAll(':', ''), 10)
5
10
  }