From 19c8f037dae1ec0fe9527a261c7e9022f9655274 Mon Sep 17 00:00:00 2001 From: gavhuang <47684670+gavhuang@users.noreply.github.com> Date: Tue, 5 Sep 2023 21:16:22 -0400 Subject: [PATCH 1/5] Fix timestamps --- .../app/pb_kits/playbook/pb_kit/dateTime.ts | 58 ++++++++++++++----- 1 file changed, 44 insertions(+), 14 deletions(-) diff --git a/playbook/app/pb_kits/playbook/pb_kit/dateTime.ts b/playbook/app/pb_kits/playbook/pb_kit/dateTime.ts index 081b7eccfd..6c30ec3ab8 100644 --- a/playbook/app/pb_kits/playbook/pb_kit/dateTime.ts +++ b/playbook/app/pb_kits/playbook/pb_kit/dateTime.ts @@ -121,25 +121,55 @@ export const toIso = (newDate: Date | string): string => { } export const fromNow = (newDate: Date | string): string => { - const startDate = formatDate(newDate).getTime() - const endDate = new Date().getTime() + const today = new Date() + const formattedDate = formatDate(newDate) + + const startDate = formattedDate.getTime() + const endDate = today.getTime() const elapsedTime = endDate - startDate - let elapsedTimeString = `${Math.round(elapsedTime / (365.25 * 24 * 60 * 60 * 1000))} years ago`; // 730+ days + const years = today.getFullYear() - formattedDate.getFullYear() + + const FOURTY_FOUR_SECONDS = 44999 + const FOURTY_FIVE_SECONDS = 45000 + const EIGHTY_NINE_SECONDS = 89999 + const NINETY_SECONDS = 90000 + + const FOURTY_FOUR_MINUTES = 2669999 + const FOURTY_FIVE_MINUTES = 2670000 + const EIGHTY_NINE_MINUTES = 5399999 + const NINETY_MINUTES = 5400000 + + const TWENTY_ONE_HOURS = 77399999 + const TWENTY_TWO_HOURS = 77400000 + const THIRTY_FIVE_HOURS = 129599999 + const THIRTY_SIX_HOURS = 129600000 + const TWENTY_FIVE_DAYS = 2203199999 + const TWENTY_SIX_DAYS = 2203200000 + const FOURTY_FIVE_DAYS = 3945199999 + + const ONE_AND_A_HALF_MONTHS = 3945200000 + const TEN_MONTHS = 27615168000 + + const MILLISECONDS_IN_A_MINUTE = 60000 + const MILLISECONDS_IN_A_HOUR = 3600000 + const MILLISECONDS_IN_A_DAY = 86400000 const MILLISECONDS_IN_A_MONTH = 30.44 * 24 * 60 * 60 * 1000 + let elapsedTimeString = years === 1 ? `${years} year ago` : `${years} years ago` // 320 days to 1+ year: "x year(s) ago" + + // https://momentjscom.readthedocs.io/en/latest/moment/04-displaying/02-fromnow/ const elapsedTimeData = [ - { min: 0, max: 44999, value: "a few seconds ago" }, // 0-44 seconds - { min: 45000, max: 89999, value: "a minute ago" }, // 45-89 seconds - { min: 90000, max: 2649999, value: `${Math.round(elapsedTime / 60000)} minutes ago`}, // 90s-44 minutes - { min: 2650000, max: 7299999, value: "an hour ago" }, // 45-120 minutes - { min: 7300000, max: 75699999, value: `${Math.round(elapsedTime / 3600000)} hours ago`}, // 2-21 hours - { min: 75700000, max: 172899999, value: "a day ago" }, // 22-48 hours - { min: 172900000, max: 2169999999, value: `${Math.round(elapsedTime / 86400000)} days ago`}, // 2-25 days - { min: 2170000000, max: 5184999999, value: "a month ago"}, // 26-60 days - { min: 5185000000, max: 27561699999, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_MONTH)} months ago`}, // 60-319 days - { min: 27561700000, max: 63072999999, value: "a year ago"}, // 320-730 days - ]; + { min: 0, max: FOURTY_FOUR_SECONDS, value: "a few seconds ago" }, // 0-44 seconds + { min: FOURTY_FIVE_SECONDS, max: EIGHTY_NINE_SECONDS, value: "a minute ago" }, // 45-89 seconds + { min: NINETY_SECONDS, max: FOURTY_FOUR_MINUTES, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_MINUTE)} minutes ago`}, // 90s-44 minutes: "2 minutes ago ... 44 minutes ago" + { min: FOURTY_FIVE_MINUTES, max: EIGHTY_NINE_MINUTES, value: "an hour ago" }, // 45-89 minutes + { min: NINETY_MINUTES, max: TWENTY_ONE_HOURS, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_HOUR)} hours ago`}, // 90m-21.49 hours: "2 hours ago ... 21 hours ago" + { min: TWENTY_TWO_HOURS, max: THIRTY_FIVE_HOURS, value: "a day ago" }, // 21.5-35 hours + { min: THIRTY_SIX_HOURS, max: TWENTY_FIVE_DAYS, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_DAY)} days ago`}, // 36h-25.49 days: "2 days ago ... 25 days ago" + { min: TWENTY_SIX_DAYS, max: FOURTY_FIVE_DAYS, value: "a month ago"}, // 25.5-44.99 days + { min: ONE_AND_A_HALF_MONTHS, max: TEN_MONTHS, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_MONTH)} months ago`}, // 45 days to 319 days: "2 months ago ... 10 months ago" + ] for (const timeDate of elapsedTimeData) { if (elapsedTime >= timeDate.min && elapsedTime <= timeDate.max) { From 75d9e4fc785c839ca234d51bc45bec164c0b90dd Mon Sep 17 00:00:00 2001 From: gavhuang <47684670+gavhuang@users.noreply.github.com> Date: Tue, 5 Sep 2023 22:12:01 -0400 Subject: [PATCH 2/5] Clarify variables and update months ago calculation to use same units (in days) --- .../app/pb_kits/playbook/pb_kit/dateTime.ts | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/playbook/app/pb_kits/playbook/pb_kit/dateTime.ts b/playbook/app/pb_kits/playbook/pb_kit/dateTime.ts index 6c30ec3ab8..fb9e107ad9 100644 --- a/playbook/app/pb_kits/playbook/pb_kit/dateTime.ts +++ b/playbook/app/pb_kits/playbook/pb_kit/dateTime.ts @@ -129,46 +129,46 @@ export const fromNow = (newDate: Date | string): string => { const elapsedTime = endDate - startDate const years = today.getFullYear() - formattedDate.getFullYear() - const FOURTY_FOUR_SECONDS = 44999 + const SUB_FOURTY_FIVE_SECONDS = 44999 const FOURTY_FIVE_SECONDS = 45000 - const EIGHTY_NINE_SECONDS = 89999 + const SUB_NINETY_SECONDS = 89999 const NINETY_SECONDS = 90000 - const FOURTY_FOUR_MINUTES = 2669999 + const SUB_FOURTY_FIVE_MINUTES = 2669999 const FOURTY_FIVE_MINUTES = 2670000 - const EIGHTY_NINE_MINUTES = 5399999 + const SUB_NINETY_MINUTES = 5399999 const NINETY_MINUTES = 5400000 - const TWENTY_ONE_HOURS = 77399999 + const SUB_TWENTY_TWO_HOURS = 77399999 const TWENTY_TWO_HOURS = 77400000 - const THIRTY_FIVE_HOURS = 129599999 + const SUB_THIRTY_SIX_HOURS = 129599999 const THIRTY_SIX_HOURS = 129600000 - const TWENTY_FIVE_DAYS = 2203199999 + const SUB_TWENTY_SIX_DAYS = 2203199999 const TWENTY_SIX_DAYS = 2203200000 - const FOURTY_FIVE_DAYS = 3945199999 + const SUB_FOURTY_FIVE_DAYS = 3887999999 + const FOURTY_FIVE_DAYS = 3888000000 - const ONE_AND_A_HALF_MONTHS = 3945200000 - const TEN_MONTHS = 27615168000 + const TEN_MONTHS = 26280000000 const MILLISECONDS_IN_A_MINUTE = 60000 const MILLISECONDS_IN_A_HOUR = 3600000 const MILLISECONDS_IN_A_DAY = 86400000 - const MILLISECONDS_IN_A_MONTH = 30.44 * 24 * 60 * 60 * 1000 + const DAYS_IN_A_MONTH = 30 let elapsedTimeString = years === 1 ? `${years} year ago` : `${years} years ago` // 320 days to 1+ year: "x year(s) ago" // https://momentjscom.readthedocs.io/en/latest/moment/04-displaying/02-fromnow/ const elapsedTimeData = [ - { min: 0, max: FOURTY_FOUR_SECONDS, value: "a few seconds ago" }, // 0-44 seconds - { min: FOURTY_FIVE_SECONDS, max: EIGHTY_NINE_SECONDS, value: "a minute ago" }, // 45-89 seconds - { min: NINETY_SECONDS, max: FOURTY_FOUR_MINUTES, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_MINUTE)} minutes ago`}, // 90s-44 minutes: "2 minutes ago ... 44 minutes ago" - { min: FOURTY_FIVE_MINUTES, max: EIGHTY_NINE_MINUTES, value: "an hour ago" }, // 45-89 minutes - { min: NINETY_MINUTES, max: TWENTY_ONE_HOURS, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_HOUR)} hours ago`}, // 90m-21.49 hours: "2 hours ago ... 21 hours ago" - { min: TWENTY_TWO_HOURS, max: THIRTY_FIVE_HOURS, value: "a day ago" }, // 21.5-35 hours - { min: THIRTY_SIX_HOURS, max: TWENTY_FIVE_DAYS, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_DAY)} days ago`}, // 36h-25.49 days: "2 days ago ... 25 days ago" - { min: TWENTY_SIX_DAYS, max: FOURTY_FIVE_DAYS, value: "a month ago"}, // 25.5-44.99 days - { min: ONE_AND_A_HALF_MONTHS, max: TEN_MONTHS, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_MONTH)} months ago`}, // 45 days to 319 days: "2 months ago ... 10 months ago" + { min: 0, max: SUB_FOURTY_FIVE_SECONDS, value: "a few seconds ago" }, // 0-44.99 seconds + { min: FOURTY_FIVE_SECONDS, max: SUB_NINETY_SECONDS, value: "a minute ago" }, // 45-89.99 seconds + { min: NINETY_SECONDS, max: SUB_FOURTY_FIVE_MINUTES, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_MINUTE)} minutes ago`}, // 90s-44.49 minutes: "2 minutes ago ... 44 minutes ago" + { min: FOURTY_FIVE_MINUTES, max: SUB_NINETY_MINUTES, value: "an hour ago" }, // 44.5-89.99 minutes + { min: NINETY_MINUTES, max: SUB_TWENTY_TWO_HOURS, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_HOUR)} hours ago`}, // 90m-21.49 hours: "2 hours ago ... 21 hours ago" + { min: TWENTY_TWO_HOURS, max: SUB_THIRTY_SIX_HOURS, value: "a day ago" }, // 21.5-35.99 hours + { min: THIRTY_SIX_HOURS, max: SUB_TWENTY_SIX_DAYS, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_DAY)} days ago`}, // 36h-25.49 days: "2 days ago ... 25 days ago" + { min: TWENTY_SIX_DAYS, max: SUB_FOURTY_FIVE_DAYS, value: "a month ago"}, // 25.5-44.99 days + { min: FOURTY_FIVE_DAYS, max: TEN_MONTHS, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_DAY / DAYS_IN_A_MONTH)} months ago`}, // 45 days to 319 days: "2 months ago ... 10 months ago" ] for (const timeDate of elapsedTimeData) { From 76323010c8baaf3ed872bac7f054115ca82a1654 Mon Sep 17 00:00:00 2001 From: gavhuang <47684670+gavhuang@users.noreply.github.com> Date: Tue, 5 Sep 2023 23:12:57 -0400 Subject: [PATCH 3/5] Correct months calculation --- playbook/app/pb_kits/playbook/pb_kit/dateTime.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/playbook/app/pb_kits/playbook/pb_kit/dateTime.ts b/playbook/app/pb_kits/playbook/pb_kit/dateTime.ts index fb9e107ad9..982cf03489 100644 --- a/playbook/app/pb_kits/playbook/pb_kit/dateTime.ts +++ b/playbook/app/pb_kits/playbook/pb_kit/dateTime.ts @@ -127,7 +127,13 @@ export const fromNow = (newDate: Date | string): string => { const startDate = formattedDate.getTime() const endDate = today.getTime() const elapsedTime = endDate - startDate - const years = today.getFullYear() - formattedDate.getFullYear() + const differenceInYears = today.getFullYear() - formattedDate.getFullYear() + const differenceInMonths = () => { + let months = differenceInYears * 12 + months -= formattedDate.getMonth() + months += today.getMonth() + return months + } const SUB_FOURTY_FIVE_SECONDS = 44999 const FOURTY_FIVE_SECONDS = 45000 @@ -154,9 +160,8 @@ export const fromNow = (newDate: Date | string): string => { const MILLISECONDS_IN_A_MINUTE = 60000 const MILLISECONDS_IN_A_HOUR = 3600000 const MILLISECONDS_IN_A_DAY = 86400000 - const DAYS_IN_A_MONTH = 30 - let elapsedTimeString = years === 1 ? `${years} year ago` : `${years} years ago` // 320 days to 1+ year: "x year(s) ago" + let elapsedTimeString = differenceInYears === 1 ? `${differenceInYears} year ago` : `${differenceInYears} years ago` // 320 days to 1+ year: "x year(s) ago" // https://momentjscom.readthedocs.io/en/latest/moment/04-displaying/02-fromnow/ const elapsedTimeData = [ @@ -168,7 +173,7 @@ export const fromNow = (newDate: Date | string): string => { { min: TWENTY_TWO_HOURS, max: SUB_THIRTY_SIX_HOURS, value: "a day ago" }, // 21.5-35.99 hours { min: THIRTY_SIX_HOURS, max: SUB_TWENTY_SIX_DAYS, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_DAY)} days ago`}, // 36h-25.49 days: "2 days ago ... 25 days ago" { min: TWENTY_SIX_DAYS, max: SUB_FOURTY_FIVE_DAYS, value: "a month ago"}, // 25.5-44.99 days - { min: FOURTY_FIVE_DAYS, max: TEN_MONTHS, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_DAY / DAYS_IN_A_MONTH)} months ago`}, // 45 days to 319 days: "2 months ago ... 10 months ago" + { min: FOURTY_FIVE_DAYS, max: TEN_MONTHS, value: `${differenceInMonths()} months ago`}, // 45 days to 319 days: "2 months ago ... 10 months ago" ] for (const timeDate of elapsedTimeData) { From 554347372c91d8fc90e1858821185967fd360a4c Mon Sep 17 00:00:00 2001 From: gavhuang <47684670+gavhuang@users.noreply.github.com> Date: Wed, 6 Sep 2023 12:07:22 -0400 Subject: [PATCH 4/5] Clean up code --- .../app/pb_kits/playbook/pb_kit/dateTime.ts | 44 +++++++++---------- 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/playbook/app/pb_kits/playbook/pb_kit/dateTime.ts b/playbook/app/pb_kits/playbook/pb_kit/dateTime.ts index 982cf03489..aabf096e32 100644 --- a/playbook/app/pb_kits/playbook/pb_kit/dateTime.ts +++ b/playbook/app/pb_kits/playbook/pb_kit/dateTime.ts @@ -127,6 +127,8 @@ export const fromNow = (newDate: Date | string): string => { const startDate = formattedDate.getTime() const endDate = today.getTime() const elapsedTime = endDate - startDate + + // For years/months, don't use elapsedTime due to rounding const differenceInYears = today.getFullYear() - formattedDate.getFullYear() const differenceInMonths = () => { let months = differenceInYears * 12 @@ -135,27 +137,19 @@ export const fromNow = (newDate: Date | string): string => { return months } - const SUB_FOURTY_FIVE_SECONDS = 44999 const FOURTY_FIVE_SECONDS = 45000 - const SUB_NINETY_SECONDS = 89999 const NINETY_SECONDS = 90000 - const SUB_FOURTY_FIVE_MINUTES = 2669999 const FOURTY_FIVE_MINUTES = 2670000 - const SUB_NINETY_MINUTES = 5399999 const NINETY_MINUTES = 5400000 - const SUB_TWENTY_TWO_HOURS = 77399999 const TWENTY_TWO_HOURS = 77400000 - const SUB_THIRTY_SIX_HOURS = 129599999 const THIRTY_SIX_HOURS = 129600000 - const SUB_TWENTY_SIX_DAYS = 2203199999 const TWENTY_SIX_DAYS = 2203200000 - const SUB_FOURTY_FIVE_DAYS = 3887999999 const FOURTY_FIVE_DAYS = 3888000000 - const TEN_MONTHS = 26280000000 + const TEN_AND_A_HALF_MONTHS = 27560000000 const MILLISECONDS_IN_A_MINUTE = 60000 const MILLISECONDS_IN_A_HOUR = 3600000 @@ -163,23 +157,25 @@ export const fromNow = (newDate: Date | string): string => { let elapsedTimeString = differenceInYears === 1 ? `${differenceInYears} year ago` : `${differenceInYears} years ago` // 320 days to 1+ year: "x year(s) ago" - // https://momentjscom.readthedocs.io/en/latest/moment/04-displaying/02-fromnow/ - const elapsedTimeData = [ - { min: 0, max: SUB_FOURTY_FIVE_SECONDS, value: "a few seconds ago" }, // 0-44.99 seconds - { min: FOURTY_FIVE_SECONDS, max: SUB_NINETY_SECONDS, value: "a minute ago" }, // 45-89.99 seconds - { min: NINETY_SECONDS, max: SUB_FOURTY_FIVE_MINUTES, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_MINUTE)} minutes ago`}, // 90s-44.49 minutes: "2 minutes ago ... 44 minutes ago" - { min: FOURTY_FIVE_MINUTES, max: SUB_NINETY_MINUTES, value: "an hour ago" }, // 44.5-89.99 minutes - { min: NINETY_MINUTES, max: SUB_TWENTY_TWO_HOURS, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_HOUR)} hours ago`}, // 90m-21.49 hours: "2 hours ago ... 21 hours ago" - { min: TWENTY_TWO_HOURS, max: SUB_THIRTY_SIX_HOURS, value: "a day ago" }, // 21.5-35.99 hours - { min: THIRTY_SIX_HOURS, max: SUB_TWENTY_SIX_DAYS, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_DAY)} days ago`}, // 36h-25.49 days: "2 days ago ... 25 days ago" - { min: TWENTY_SIX_DAYS, max: SUB_FOURTY_FIVE_DAYS, value: "a month ago"}, // 25.5-44.99 days - { min: FOURTY_FIVE_DAYS, max: TEN_MONTHS, value: `${differenceInMonths()} months ago`}, // 45 days to 319 days: "2 months ago ... 10 months ago" + // Inspiration: https://momentjs.com/docs/#/displaying/fromnow/ + const intervals = [ + { min: 0, max: FOURTY_FIVE_SECONDS, value: "a few seconds ago" }, // 0-44.99 seconds + { min: FOURTY_FIVE_SECONDS, max: NINETY_SECONDS, value: "a minute ago" }, // 45-89.99 seconds + { min: NINETY_SECONDS, max: FOURTY_FIVE_MINUTES, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_MINUTE)} minutes ago` }, // 90s-44.49 minutes: "2 minutes ago ... 44 minutes ago" + { min: FOURTY_FIVE_MINUTES, max: NINETY_MINUTES, value: "an hour ago" }, // 44.5-89.99 minutes + { min: NINETY_MINUTES, max: TWENTY_TWO_HOURS, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_HOUR)} hours ago` }, // 90m-21.49 hours: "2 hours ago ... 21 hours ago" + { min: TWENTY_TWO_HOURS, max: THIRTY_SIX_HOURS, value: "a day ago" }, // 21.5-35.99 hours + { min: THIRTY_SIX_HOURS, max: TWENTY_SIX_DAYS, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_DAY)} days ago` }, // 36h-25.49 days: "2 days ago ... 25 days ago" + { min: TWENTY_SIX_DAYS, max: FOURTY_FIVE_DAYS, value: "a month ago" }, // 25.5-44.99 days + { min: FOURTY_FIVE_DAYS, max: TEN_AND_A_HALF_MONTHS, value: `${differenceInMonths()} months ago` }, // 45 days to 319 days: "2 months ago ... 10 months ago" ] - for (const timeDate of elapsedTimeData) { - if (elapsedTime >= timeDate.min && elapsedTime <= timeDate.max) { - elapsedTimeString = timeDate.value; - break; + for (const interval of intervals) { + const { min, max, value } = interval + + if (elapsedTime >= min && elapsedTime < max) { + elapsedTimeString = value + break } } From 1658aeefcca00718e901f22d290c500b4dd45a2a Mon Sep 17 00:00:00 2001 From: gavhuang <47684670+gavhuang@users.noreply.github.com> Date: Wed, 6 Sep 2023 14:00:20 -0400 Subject: [PATCH 5/5] Correct spelling --- .../app/pb_kits/playbook/pb_kit/dateTime.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/playbook/app/pb_kits/playbook/pb_kit/dateTime.ts b/playbook/app/pb_kits/playbook/pb_kit/dateTime.ts index aabf096e32..f6eddb95dd 100644 --- a/playbook/app/pb_kits/playbook/pb_kit/dateTime.ts +++ b/playbook/app/pb_kits/playbook/pb_kit/dateTime.ts @@ -137,17 +137,17 @@ export const fromNow = (newDate: Date | string): string => { return months } - const FOURTY_FIVE_SECONDS = 45000 + const FORTY_FIVE_SECONDS = 45000 const NINETY_SECONDS = 90000 - const FOURTY_FIVE_MINUTES = 2670000 + const FORTY_FIVE_MINUTES = 2670000 const NINETY_MINUTES = 5400000 const TWENTY_TWO_HOURS = 77400000 const THIRTY_SIX_HOURS = 129600000 const TWENTY_SIX_DAYS = 2203200000 - const FOURTY_FIVE_DAYS = 3888000000 + const FORTY_FIVE_DAYS = 3888000000 const TEN_AND_A_HALF_MONTHS = 27560000000 @@ -159,15 +159,15 @@ export const fromNow = (newDate: Date | string): string => { // Inspiration: https://momentjs.com/docs/#/displaying/fromnow/ const intervals = [ - { min: 0, max: FOURTY_FIVE_SECONDS, value: "a few seconds ago" }, // 0-44.99 seconds - { min: FOURTY_FIVE_SECONDS, max: NINETY_SECONDS, value: "a minute ago" }, // 45-89.99 seconds - { min: NINETY_SECONDS, max: FOURTY_FIVE_MINUTES, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_MINUTE)} minutes ago` }, // 90s-44.49 minutes: "2 minutes ago ... 44 minutes ago" - { min: FOURTY_FIVE_MINUTES, max: NINETY_MINUTES, value: "an hour ago" }, // 44.5-89.99 minutes + { min: 0, max: FORTY_FIVE_SECONDS, value: "a few seconds ago" }, // 0-44.99 seconds + { min: FORTY_FIVE_SECONDS, max: NINETY_SECONDS, value: "a minute ago" }, // 45-89.99 seconds + { min: NINETY_SECONDS, max: FORTY_FIVE_MINUTES, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_MINUTE)} minutes ago` }, // 90s-44.49 minutes: "2 minutes ago ... 44 minutes ago" + { min: FORTY_FIVE_MINUTES, max: NINETY_MINUTES, value: "an hour ago" }, // 44.5-89.99 minutes { min: NINETY_MINUTES, max: TWENTY_TWO_HOURS, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_HOUR)} hours ago` }, // 90m-21.49 hours: "2 hours ago ... 21 hours ago" { min: TWENTY_TWO_HOURS, max: THIRTY_SIX_HOURS, value: "a day ago" }, // 21.5-35.99 hours { min: THIRTY_SIX_HOURS, max: TWENTY_SIX_DAYS, value: `${Math.round(elapsedTime / MILLISECONDS_IN_A_DAY)} days ago` }, // 36h-25.49 days: "2 days ago ... 25 days ago" - { min: TWENTY_SIX_DAYS, max: FOURTY_FIVE_DAYS, value: "a month ago" }, // 25.5-44.99 days - { min: FOURTY_FIVE_DAYS, max: TEN_AND_A_HALF_MONTHS, value: `${differenceInMonths()} months ago` }, // 45 days to 319 days: "2 months ago ... 10 months ago" + { min: TWENTY_SIX_DAYS, max: FORTY_FIVE_DAYS, value: "a month ago" }, // 25.5-44.99 days + { min: FORTY_FIVE_DAYS, max: TEN_AND_A_HALF_MONTHS, value: `${differenceInMonths()} months ago` }, // 45 days to 319 days: "2 months ago ... 10 months ago" ] for (const interval of intervals) {