From 0533cd24fe926bafc485cd4fc1c03996c18bf6bf Mon Sep 17 00:00:00 2001 From: James Collins Date: Fri, 23 Jun 2023 18:53:44 +1000 Subject: [PATCH] fix relative dates in the future --- resources/js/helpers/datetime.ts | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/resources/js/helpers/datetime.ts b/resources/js/helpers/datetime.ts index 17ae703..5009daf 100644 --- a/resources/js/helpers/datetime.ts +++ b/resources/js/helpers/datetime.ts @@ -62,7 +62,6 @@ export class SMDate { /** * Parse a string date into a Date object - * * @param {string} dateString The date string. * @param {object} options (optional) Options object. * @param {string} options.format (optional) The format of the date string. @@ -239,7 +238,6 @@ export class SMDate { /** * Format the date to a string. - * * @param {string} format The format to return. * @param {object} options (optional) Function options. * @param {boolean} options.utc (optional) Format the date to be as UTC instead of local. @@ -334,7 +332,6 @@ export class SMDate { /** * Return a relative date string from now. - * * @returns {string} A relative date string. */ public relative(): string { @@ -343,22 +340,24 @@ export class SMDate { } const now = new Date(); - const dif = Math.round((now.getTime() - this.date.getTime()) / 1000); + let dif = Math.round((now.getTime() - this.date.getTime()) / 1000); + const format = dif < 0 ? "in %" : "% ago"; + dif = Math.abs(dif); if (dif < 60) { return "Just now"; } else if (dif < 3600) { const v = Math.round(dif / 60); - return `${v} min${v != 1 ? "s" : ""} ago`; + return format.replace("%", `${v} min${v != 1 ? "s" : ""}`); } else if (dif < 86400) { const v = Math.round(dif / 3600); - return `${v} hour${v != 1 ? "s" : ""} ago`; + return format.replace("%", `${v} hour${v != 1 ? "s" : ""}`); } else if (dif < 604800) { const v = Math.round(dif / 86400); - return `${v} day${v != 1 ? "s" : ""} ago`; + return format.replace("%", `${v} day${v != 1 ? "s" : ""}`); } else if (dif < 2419200) { const v = Math.round(dif / 604800); - return `${v} week${v != 1 ? "s" : ""} ago`; + return format.replace("%", `${v} week${v != 1 ? "s" : ""}`); } else { return ( this.monthString[this.date.getMonth()] + @@ -372,7 +371,6 @@ export class SMDate { /** * If the date is before the passed date. - * * @param {Date|SMDate} d (optional) The date to check. If none, use now * @returns {boolean} If the date is before the passed date. */ @@ -391,7 +389,6 @@ export class SMDate { /** * If the date is after the passed date. - * * @param {Date|SMDate} d (optional) The date to check. If none, use now * @returns {boolean} If the date is after the passed date. */ @@ -410,7 +407,6 @@ export class SMDate { /** * Return a month number from a string or a month number or month name - * * @param {string} monthString The month string as number or name * @returns {number} The month number */ @@ -436,7 +432,6 @@ export class SMDate { /** * Test if the current date is valid. - * * @returns {boolean} If the current date is valid. */ public isValid(): boolean { @@ -445,7 +440,6 @@ export class SMDate { /** * Return a string with only the first occurrence of characters - * * @param {string} str The string to modify. * @param {string} characters The characters to use to test. * @returns {string} A string that only contains the first occurrence of the characters.