@cityssm/utils-datetime 1.0.0 → 1.1.1

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 (45) 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 +10 -8
  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 -1
  19. package/dateToTimePeriodString.ts +9 -2
  20. package/dateToTimeString.d.ts +2 -1
  21. package/dateToTimeString.ts +9 -2
  22. package/index.d.ts +13 -0
  23. package/index.js +12 -0
  24. package/index.ts +21 -0
  25. package/isValidDateInteger.d.ts +1 -0
  26. package/isValidDateInteger.js +5 -0
  27. package/isValidDateInteger.ts +14 -0
  28. package/isValidDateString.d.ts +2 -0
  29. package/isValidDateString.js +6 -0
  30. package/isValidDateString.ts +18 -0
  31. package/isValidTimeInteger.d.ts +1 -0
  32. package/isValidTimeInteger.js +6 -0
  33. package/isValidTimeInteger.ts +15 -0
  34. package/isValidTimeString.d.ts +2 -0
  35. package/isValidTimeString.js +6 -0
  36. package/isValidTimeString.ts +18 -0
  37. package/package.json +3 -3
  38. package/timeIntegerToPeriodString.d.ts +2 -1
  39. package/timeIntegerToPeriodString.ts +9 -1
  40. package/timeIntegerToString.d.ts +2 -1
  41. package/timeIntegerToString.js +2 -2
  42. package/timeIntegerToString.ts +13 -3
  43. package/timeStringToInteger.d.ts +2 -1
  44. package/timeStringToInteger.js +1 -1
  45. package/timeStringToInteger.ts +9 -2
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.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,18 +1,20 @@
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
 
@@ -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 +1,2 @@
1
- export declare function dateToTimePeriodString(dateObject: Date): string;
1
+ import type { TimePeriodString } from './dateTimeTypes.js';
2
+ export declare function dateToTimePeriodString(dateObject: Date): TimePeriodString;
@@ -1,9 +1,16 @@
1
- export function dateToTimePeriodString(dateObject: Date): string {
1
+ import type { TimePeriodString } from './dateTimeTypes.js'
2
+
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 {
2
9
  return Intl.DateTimeFormat('en-CA', {
3
10
  hourCycle: 'h12',
4
11
  hour: 'numeric',
5
12
  minute: '2-digit'
6
13
  })
7
14
  .format(dateObject)
8
- .replaceAll('\u202F', ' ')
15
+ .replaceAll('\u202F', ' ') as TimePeriodString
9
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): possibleDateInteger is number;
@@ -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,14 @@
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(
7
+ possibleDateInteger: unknown
8
+ ): possibleDateInteger is number {
9
+ return (
10
+ typeof possibleDateInteger === 'number' &&
11
+ possibleDateInteger >= 101 &&
12
+ possibleDateInteger % 1 === 0
13
+ )
14
+ }
@@ -0,0 +1,2 @@
1
+ import type { DateString } from './dateTimeTypes.js';
2
+ export declare function isValidDateString(possibleDateString: unknown): possibleDateString is DateString;
@@ -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,18 @@
1
+ import type { DateString } from './dateTimeTypes.js'
2
+
3
+ const dateStringRegex = /^\d{4}-[01]\d-[0-3]\d$/
4
+
5
+ /**
6
+ * Determines if a string is a valid date string.
7
+ * @param {unknown} possibleDateString - A possible date string
8
+ * @returns {boolean} - True when the possible date string is valid
9
+ */
10
+ export function isValidDateString(
11
+ possibleDateString: unknown
12
+ ): possibleDateString is DateString {
13
+ return (
14
+ typeof possibleDateString === 'string' &&
15
+ (possibleDateString ?? '').length === 10 &&
16
+ dateStringRegex.test(possibleDateString)
17
+ )
18
+ }
@@ -0,0 +1 @@
1
+ export declare function isValidTimeInteger(possibleTimeInteger: unknown): possibleTimeInteger is number;
@@ -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,15 @@
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(
7
+ possibleTimeInteger: unknown
8
+ ): possibleTimeInteger is number {
9
+ return (
10
+ typeof possibleTimeInteger === 'number' &&
11
+ possibleTimeInteger >= 0 &&
12
+ possibleTimeInteger <= 2359 &&
13
+ possibleTimeInteger % 1 === 0
14
+ )
15
+ }
@@ -0,0 +1,2 @@
1
+ import type { TimeString } from './dateTimeTypes.js';
2
+ export declare function isValidTimeString(possibleTimeString: unknown): possibleTimeString is TimeString;
@@ -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,18 @@
1
+ import type { TimeString } from './dateTimeTypes.js'
2
+
3
+ const timeStringRegex = /^[01]\d:[0-5]\d$/
4
+
5
+ /**
6
+ * Determines if a string is a valid time string.
7
+ * @param {unknown} possibleTimeString - A possible time string.
8
+ * @returns {boolean} - True when the possible time string is valid.
9
+ */
10
+ export function isValidTimeString(
11
+ possibleTimeString: unknown
12
+ ): possibleTimeString is TimeString {
13
+ return (
14
+ typeof possibleTimeString === 'string' &&
15
+ (possibleTimeString ?? '').length === 5 &&
16
+ timeStringRegex.test(possibleTimeString)
17
+ )
18
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cityssm/utils-datetime",
3
- "version": "1.0.0",
3
+ "version": "1.1.1",
4
4
  "description": "Date time utilities for Node.js applications",
5
5
  "keywords": [
6
6
  "date",
@@ -32,7 +32,7 @@
32
32
  "license": "MIT",
33
33
  "devDependencies": {
34
34
  "@types/mocha": "^10.0.6",
35
- "@types/node": "^20.10.0",
36
- "eslint-config-cityssm": "^1.0.0"
35
+ "@types/node": "^20.11.19",
36
+ "eslint-config-cityssm": "^1.4.1"
37
37
  }
38
38
  }
@@ -1 +1,2 @@
1
- export declare function timeIntegerToPeriodString(timeInteger: number): string;
1
+ import type { TimePeriodString } from './dateTimeTypes.js';
2
+ export declare function timeIntegerToPeriodString(timeInteger: number): TimePeriodString;
@@ -1,7 +1,15 @@
1
1
  import { dateIntegerToDate } from './dateIntegerToDate.js'
2
+ import type { TimePeriodString } from './dateTimeTypes.js'
2
3
  import { dateToTimePeriodString } from './dateToTimePeriodString.js'
3
4
 
4
- 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 {
5
13
  // eslint-disable-next-line unicorn/numeric-separators-style
6
14
  return dateToTimePeriodString(dateIntegerToDate(19700101, timeInteger))
7
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 +1,2 @@
1
- export declare function timeStringToInteger(timeString: string): number;
1
+ import type { TimeString } from './dateTimeTypes.js';
2
+ export declare function timeStringToInteger(timeString: TimeString): number;
@@ -1,3 +1,3 @@
1
1
  export function timeStringToInteger(timeString) {
2
- return Number.parseInt(('0' + timeString).replaceAll(':', ''), 10);
2
+ return Number.parseInt(`0${timeString}`.replaceAll(':', ''), 10);
3
3
  }
@@ -1,3 +1,10 @@
1
- export function timeStringToInteger(timeString: string): number {
2
- return Number.parseInt(('0' + timeString).replaceAll(':', ''), 10)
1
+ import type { TimeString } from './dateTimeTypes.js'
2
+
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)
3
10
  }