22 * Contains an assortment of helper constants and functions for working with time, dates, and durations.
33 */
44
5- export const ONE_DAY_IN_MS = 24 * 60 * 60 * 1000 ;
6- export const ONE_HOUR_IN_MS = 1000 * 60 * 60 ;
7- export const TWO_HOURS_IN_MS = 1000 * 60 * 60 * 2 ;
8- export const THREE_HOURS_IN_MS = 1000 * 60 * 60 * 3 ;
5+ export const ONE_MINUTE_IN_MS = 1000 * 60 ;
6+ export const ONE_HOUR_IN_MS = ONE_MINUTE_IN_MS * 60 ;
7+ export const TWO_HOURS_IN_MS = ONE_HOUR_IN_MS * 2 ;
8+ export const THREE_HOURS_IN_MS = ONE_HOUR_IN_MS * 3 ;
9+ export const ONE_DAY_IN_MS = ONE_HOUR_IN_MS * 24 ;
10+
11+ // These are approximations
12+ export const ONE_MONTH_IN_MS = ONE_DAY_IN_MS * 30 ;
13+ export const ONE_YEAR_IN_MS = ONE_DAY_IN_MS * 365 ;
914
1015const durationFormatter = new Intl . RelativeTimeFormat ( 'en' , {
1116 numeric : 'auto' ,
1217} ) ;
1318
14- // Months and years are approximate
15- const MINUTE_IN_MILLIS = 1000 * 60 ;
16- const HOUR_IN_MILLIS = 60 * MINUTE_IN_MILLIS ;
17- const DAY_IN_MILLIS = 24 * HOUR_IN_MILLIS ;
18- const MONTH_IN_MILLIS = 30 * DAY_IN_MILLIS ;
19- const YEAR_IN_MILLIS = 365 * DAY_IN_MILLIS ;
20-
2119/**
2220 * Converts a number of milliseconds into a human-readable string with units, indicating a relative time in the past or future.
2321 *
@@ -30,16 +28,16 @@ export function humanizeRelativeTime(relativeTimeMillis?: number) {
3028 return '' ;
3129 }
3230
33- if ( Math . abs ( relativeTimeMillis ) < HOUR_IN_MILLIS ) {
34- return durationFormatter . format ( Math . floor ( relativeTimeMillis / MINUTE_IN_MILLIS ) , 'minute' ) ;
35- } else if ( Math . abs ( relativeTimeMillis ) < DAY_IN_MILLIS ) {
36- return durationFormatter . format ( Math . floor ( relativeTimeMillis / HOUR_IN_MILLIS ) , 'hour' ) ;
37- } else if ( Math . abs ( relativeTimeMillis ) < MONTH_IN_MILLIS ) {
38- return durationFormatter . format ( Math . floor ( relativeTimeMillis / DAY_IN_MILLIS ) , 'day' ) ;
39- } else if ( Math . abs ( relativeTimeMillis ) < YEAR_IN_MILLIS ) {
40- return durationFormatter . format ( Math . floor ( relativeTimeMillis / MONTH_IN_MILLIS ) , 'month' ) ;
31+ if ( Math . abs ( relativeTimeMillis ) < ONE_HOUR_IN_MS ) {
32+ return durationFormatter . format ( Math . floor ( relativeTimeMillis / ONE_MINUTE_IN_MS ) , 'minute' ) ;
33+ } else if ( Math . abs ( relativeTimeMillis ) < ONE_DAY_IN_MS ) {
34+ return durationFormatter . format ( Math . floor ( relativeTimeMillis / ONE_HOUR_IN_MS ) , 'hour' ) ;
35+ } else if ( Math . abs ( relativeTimeMillis ) < ONE_MONTH_IN_MS ) {
36+ return durationFormatter . format ( Math . floor ( relativeTimeMillis / ONE_DAY_IN_MS ) , 'day' ) ;
37+ } else if ( Math . abs ( relativeTimeMillis ) < ONE_YEAR_IN_MS ) {
38+ return durationFormatter . format ( Math . floor ( relativeTimeMillis / ONE_MONTH_IN_MS ) , 'month' ) ;
4139 } else {
42- return durationFormatter . format ( Math . floor ( relativeTimeMillis / YEAR_IN_MILLIS ) , 'year' ) ;
40+ return durationFormatter . format ( Math . floor ( relativeTimeMillis / ONE_YEAR_IN_MS ) , 'year' ) ;
4341 }
4442}
4543
@@ -53,26 +51,26 @@ export function humanizeRelativeTime(relativeTimeMillis?: number) {
5351export function humanizeUnit ( millis ?: number ) : string {
5452 // assume a blank or empty string is a zero
5553 // assume anything less than 0 is a zero
56- if ( ! millis || millis < MINUTE_IN_MILLIS ) {
54+ if ( ! millis || millis < ONE_MINUTE_IN_MS ) {
5755 return 'Less than a minute' ;
5856 }
5957 let unit : string ;
6058 let unitDiff : number ;
61- if ( millis < HOUR_IN_MILLIS ) {
59+ if ( millis < ONE_HOUR_IN_MS ) {
6260 unit = 'minute' ;
63- unitDiff = Math . floor ( millis / MINUTE_IN_MILLIS ) ;
64- } else if ( millis < DAY_IN_MILLIS ) {
61+ unitDiff = Math . floor ( millis / ONE_MINUTE_IN_MS ) ;
62+ } else if ( millis < ONE_DAY_IN_MS ) {
6563 unit = 'hour' ;
66- unitDiff = Math . floor ( millis / HOUR_IN_MILLIS ) ;
67- } else if ( millis < MONTH_IN_MILLIS ) {
64+ unitDiff = Math . floor ( millis / ONE_HOUR_IN_MS ) ;
65+ } else if ( millis < ONE_MONTH_IN_MS ) {
6866 unit = 'day' ;
69- unitDiff = Math . floor ( millis / DAY_IN_MILLIS ) ;
70- } else if ( millis < YEAR_IN_MILLIS ) {
67+ unitDiff = Math . floor ( millis / ONE_DAY_IN_MS ) ;
68+ } else if ( millis < ONE_YEAR_IN_MS ) {
7169 unit = 'month' ;
72- unitDiff = Math . floor ( millis / MONTH_IN_MILLIS ) ;
70+ unitDiff = Math . floor ( millis / ONE_MONTH_IN_MS ) ;
7371 } else {
7472 unit = 'year' ;
75- unitDiff = Math . floor ( millis / YEAR_IN_MILLIS ) ;
73+ unitDiff = Math . floor ( millis / ONE_YEAR_IN_MS ) ;
7674 }
7775
7876 return createFormatter ( unit ) . format ( unitDiff ) ;
0 commit comments