mirror of
https://github.com/nodejs/node.git
synced 2025-05-17 23:45:33 +00:00

PR-URL: https://github.com/nodejs/node/pull/20190 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com>
100 lines
2.5 KiB
JavaScript
100 lines
2.5 KiB
JavaScript
'use strict';
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = relativeDateFactory;
|
|
var calculateDelta = function calculateDelta(now, date) {
|
|
return Math.round(Math.abs(now - date) / 1000);
|
|
};
|
|
|
|
function relativeDateFactory(translations) {
|
|
return function relativeDate(date) {
|
|
var now = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();
|
|
|
|
if (!(date instanceof Date)) {
|
|
date = new Date(date);
|
|
}
|
|
|
|
var delta = null;
|
|
|
|
var minute = 60;
|
|
var hour = minute * 60;
|
|
var day = hour * 24;
|
|
var week = day * 7;
|
|
var month = day * 30;
|
|
var year = day * 365;
|
|
|
|
delta = calculateDelta(now, date);
|
|
|
|
if (delta > day && delta < week) {
|
|
date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);
|
|
delta = calculateDelta(now, date);
|
|
}
|
|
|
|
var translate = function translate(translatePhrase, timeValue) {
|
|
var key = void 0;
|
|
|
|
if (translatePhrase === 'justNow') {
|
|
key = translatePhrase;
|
|
} else if (now >= date) {
|
|
key = translatePhrase + 'Ago';
|
|
} else {
|
|
key = translatePhrase + 'FromNow';
|
|
}
|
|
|
|
var translation = translations[key];
|
|
|
|
if (typeof translation === 'function') {
|
|
return translation(timeValue);
|
|
}
|
|
|
|
return translation.replace('{{time}}', timeValue);
|
|
};
|
|
|
|
switch (false) {
|
|
case !(delta < 30):
|
|
return translate('justNow');
|
|
|
|
case !(delta < minute):
|
|
return translate('seconds', delta);
|
|
|
|
case !(delta < 2 * minute):
|
|
return translate('aMinute');
|
|
|
|
case !(delta < hour):
|
|
return translate('minutes', Math.floor(delta / minute));
|
|
|
|
case Math.floor(delta / hour) !== 1:
|
|
return translate('anHour');
|
|
|
|
case !(delta < day):
|
|
return translate('hours', Math.floor(delta / hour));
|
|
|
|
case !(delta < day * 2):
|
|
return translate('aDay');
|
|
|
|
case !(delta < week):
|
|
return translate('days', Math.floor(delta / day));
|
|
|
|
case Math.floor(delta / week) !== 1:
|
|
return translate('aWeek');
|
|
|
|
case !(delta < month):
|
|
return translate('weeks', Math.floor(delta / week));
|
|
|
|
case Math.floor(delta / month) !== 1:
|
|
return translate('aMonth');
|
|
|
|
case !(delta < year):
|
|
return translate('months', Math.floor(delta / month));
|
|
|
|
case Math.floor(delta / year) !== 1:
|
|
return translate('aYear');
|
|
|
|
default:
|
|
return translate('overAYear');
|
|
}
|
|
};
|
|
}
|
|
module.exports = exports['default']; |