matrix-react-sdk
Version:
SDK for matrix.org using React
68 lines (64 loc) • 8.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.humanizeTime = humanizeTime;
var _languageHandler = require("../languageHandler");
/*
Copyright 2024 New Vector Ltd.
Copyright 2020, 2021 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
// These are the constants we use for when to break the text
const MILLISECONDS_RECENT = 15000;
const MILLISECONDS_1_MIN = 75000;
const MINUTES_UNDER_1_HOUR = 45;
const MINUTES_1_HOUR = 75;
const HOURS_UNDER_1_DAY = 23;
const HOURS_1_DAY = 26;
/**
* Converts a timestamp into human-readable, translated, text.
* @param {number} timeMillis The time in millis to compare against.
* @returns {string} The humanized time.
*/
function humanizeTime(timeMillis) {
const now = Date.now();
let msAgo = now - timeMillis;
const minutes = Math.abs(Math.ceil(msAgo / 60000));
const hours = Math.ceil(minutes / 60);
const days = Math.ceil(hours / 24);
if (msAgo >= 0) {
// Past
if (msAgo <= MILLISECONDS_RECENT) return (0, _languageHandler._t)("time|few_seconds_ago");
if (msAgo <= MILLISECONDS_1_MIN) return (0, _languageHandler._t)("time|about_minute_ago");
if (minutes <= MINUTES_UNDER_1_HOUR) return (0, _languageHandler._t)("time|n_minutes_ago", {
num: minutes
});
if (minutes <= MINUTES_1_HOUR) return (0, _languageHandler._t)("time|about_hour_ago");
if (hours <= HOURS_UNDER_1_DAY) return (0, _languageHandler._t)("time|n_hours_ago", {
num: hours
});
if (hours <= HOURS_1_DAY) return (0, _languageHandler._t)("time|about_day_ago");
return (0, _languageHandler._t)("time|n_days_ago", {
num: days
});
} else {
// Future
msAgo = Math.abs(msAgo);
if (msAgo <= MILLISECONDS_RECENT) return (0, _languageHandler._t)("time|in_few_seconds");
if (msAgo <= MILLISECONDS_1_MIN) return (0, _languageHandler._t)("time|in_about_minute");
if (minutes <= MINUTES_UNDER_1_HOUR) return (0, _languageHandler._t)("time|in_n_minutes", {
num: minutes
});
if (minutes <= MINUTES_1_HOUR) return (0, _languageHandler._t)("time|in_about_hour");
if (hours <= HOURS_UNDER_1_DAY) return (0, _languageHandler._t)("time|in_n_hours", {
num: hours
});
if (hours <= HOURS_1_DAY) return (0, _languageHandler._t)("time|in_about_day");
return (0, _languageHandler._t)("time|in_n_days", {
num: days
});
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGFuZ3VhZ2VIYW5kbGVyIiwicmVxdWlyZSIsIk1JTExJU0VDT05EU19SRUNFTlQiLCJNSUxMSVNFQ09ORFNfMV9NSU4iLCJNSU5VVEVTX1VOREVSXzFfSE9VUiIsIk1JTlVURVNfMV9IT1VSIiwiSE9VUlNfVU5ERVJfMV9EQVkiLCJIT1VSU18xX0RBWSIsImh1bWFuaXplVGltZSIsInRpbWVNaWxsaXMiLCJub3ciLCJEYXRlIiwibXNBZ28iLCJtaW51dGVzIiwiTWF0aCIsImFicyIsImNlaWwiLCJob3VycyIsImRheXMiLCJfdCIsIm51bSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9odW1hbml6ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMCwgMjAyMSBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi9sYW5ndWFnZUhhbmRsZXJcIjtcblxuLy8gVGhlc2UgYXJlIHRoZSBjb25zdGFudHMgd2UgdXNlIGZvciB3aGVuIHRvIGJyZWFrIHRoZSB0ZXh0XG5jb25zdCBNSUxMSVNFQ09ORFNfUkVDRU5UID0gMTUwMDA7XG5jb25zdCBNSUxMSVNFQ09ORFNfMV9NSU4gPSA3NTAwMDtcbmNvbnN0IE1JTlVURVNfVU5ERVJfMV9IT1VSID0gNDU7XG5jb25zdCBNSU5VVEVTXzFfSE9VUiA9IDc1O1xuY29uc3QgSE9VUlNfVU5ERVJfMV9EQVkgPSAyMztcbmNvbnN0IEhPVVJTXzFfREFZID0gMjY7XG5cbi8qKlxuICogQ29udmVydHMgYSB0aW1lc3RhbXAgaW50byBodW1hbi1yZWFkYWJsZSwgdHJhbnNsYXRlZCwgdGV4dC5cbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lTWlsbGlzIFRoZSB0aW1lIGluIG1pbGxpcyB0byBjb21wYXJlIGFnYWluc3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgaHVtYW5pemVkIHRpbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBodW1hbml6ZVRpbWUodGltZU1pbGxpczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGxldCBtc0FnbyA9IG5vdyAtIHRpbWVNaWxsaXM7XG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguYWJzKE1hdGguY2VpbChtc0FnbyAvIDYwMDAwKSk7XG4gICAgY29uc3QgaG91cnMgPSBNYXRoLmNlaWwobWludXRlcyAvIDYwKTtcbiAgICBjb25zdCBkYXlzID0gTWF0aC5jZWlsKGhvdXJzIC8gMjQpO1xuXG4gICAgaWYgKG1zQWdvID49IDApIHtcbiAgICAgICAgLy8gUGFzdFxuICAgICAgICBpZiAobXNBZ28gPD0gTUlMTElTRUNPTkRTX1JFQ0VOVCkgcmV0dXJuIF90KFwidGltZXxmZXdfc2Vjb25kc19hZ29cIik7XG4gICAgICAgIGlmIChtc0FnbyA8PSBNSUxMSVNFQ09ORFNfMV9NSU4pIHJldHVybiBfdChcInRpbWV8YWJvdXRfbWludXRlX2Fnb1wiKTtcbiAgICAgICAgaWYgKG1pbnV0ZXMgPD0gTUlOVVRFU19VTkRFUl8xX0hPVVIpIHJldHVybiBfdChcInRpbWV8bl9taW51dGVzX2Fnb1wiLCB7IG51bTogbWludXRlcyB9KTtcbiAgICAgICAgaWYgKG1pbnV0ZXMgPD0gTUlOVVRFU18xX0hPVVIpIHJldHVybiBfdChcInRpbWV8YWJvdXRfaG91cl9hZ29cIik7XG4gICAgICAgIGlmIChob3VycyA8PSBIT1VSU19VTkRFUl8xX0RBWSkgcmV0dXJuIF90KFwidGltZXxuX2hvdXJzX2Fnb1wiLCB7IG51bTogaG91cnMgfSk7XG4gICAgICAgIGlmIChob3VycyA8PSBIT1VSU18xX0RBWSkgcmV0dXJuIF90KFwidGltZXxhYm91dF9kYXlfYWdvXCIpO1xuICAgICAgICByZXR1cm4gX3QoXCJ0aW1lfG5fZGF5c19hZ29cIiwgeyBudW06IGRheXMgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRnV0dXJlXG4gICAgICAgIG1zQWdvID0gTWF0aC5hYnMobXNBZ28pO1xuICAgICAgICBpZiAobXNBZ28gPD0gTUlMTElTRUNPTkRTX1JFQ0VOVCkgcmV0dXJuIF90KFwidGltZXxpbl9mZXdfc2Vjb25kc1wiKTtcbiAgICAgICAgaWYgKG1zQWdvIDw9IE1JTExJU0VDT05EU18xX01JTikgcmV0dXJuIF90KFwidGltZXxpbl9hYm91dF9taW51dGVcIik7XG4gICAgICAgIGlmIChtaW51dGVzIDw9IE1JTlVURVNfVU5ERVJfMV9IT1VSKSByZXR1cm4gX3QoXCJ0aW1lfGluX25fbWludXRlc1wiLCB7IG51bTogbWludXRlcyB9KTtcbiAgICAgICAgaWYgKG1pbnV0ZXMgPD0gTUlOVVRFU18xX0hPVVIpIHJldHVybiBfdChcInRpbWV8aW5fYWJvdXRfaG91clwiKTtcbiAgICAgICAgaWYgKGhvdXJzIDw9IEhPVVJTX1VOREVSXzFfREFZKSByZXR1cm4gX3QoXCJ0aW1lfGluX25faG91cnNcIiwgeyBudW06IGhvdXJzIH0pO1xuICAgICAgICBpZiAoaG91cnMgPD0gSE9VUlNfMV9EQVkpIHJldHVybiBfdChcInRpbWV8aW5fYWJvdXRfZGF5XCIpO1xuICAgICAgICByZXR1cm4gX3QoXCJ0aW1lfGluX25fZGF5c1wiLCB7IG51bTogZGF5cyB9KTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQVFBLElBQUFBLGdCQUFBLEdBQUFDLE9BQUE7QUFSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFJQTtBQUNBLE1BQU1DLG1CQUFtQixHQUFHLEtBQUs7QUFDakMsTUFBTUMsa0JBQWtCLEdBQUcsS0FBSztBQUNoQyxNQUFNQyxvQkFBb0IsR0FBRyxFQUFFO0FB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