ok-tools
Version:
My personal JS tools and utilities
151 lines • 5.68 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.relativeTime = void 0;
var languages_enum_1 = require("./languages.enum");
var time_constants_1 = require("./time-constants");
var pluralize_1 = require("./pluralize");
var parse_time_1 = require("./parse-time");
function relativeTime(input, language, now) {
if (language === void 0) { language = languages_enum_1.Languages.CZECH; }
if (now === void 0) { now = null; }
var date = parse_time_1.parseTime(input);
if (!date) {
return '';
}
var thatTime = date.getTime();
if (!now) {
now = new Date();
}
var diff = now.getTime() - thatTime;
// Budoucí datum - asi jen omylem, zaokrouhlíme na 0
if (diff < 0 && diff > -100) {
diff = 0;
}
// Future dates support
if (diff < 0) {
if (diff > -5000) {
return time_constants_1.Words.now[language];
}
if (diff > -60000) {
return time_constants_1.Words.momentLater[language];
}
if (diff > -3600000) {
var minutes = -1 * Math.round(diff / 60000);
return pluralize_1.pluralize(minutes, time_constants_1.Words.minutesLater[language]);
}
if (diff > -3600000 * 5) {
var hours = -1 * Math.round(diff / (3600 * 1000));
return pluralize_1.pluralize(hours, time_constants_1.Words.hoursLater[language]);
}
if (diff > -3600 * 1000 * 23) {
var tomorrow = '';
if (date.getDay() === now.getDay() + 1 || (now.getDay() === 6 && date.getDay() === 0)) {
tomorrow = time_constants_1.Words.tomorrowAt[language] + ' ';
}
else {
tomorrow = time_constants_1.Words.todayAt[language] + ' ';
}
return tomorrow + formatTimeOfDay(date);
}
// tento rok
if (now.getFullYear() === date.getFullYear()) {
if (language === languages_enum_1.Languages.CZECH) {
// @ts-ignore
return (date.getDate()) + '. ' + time_constants_1.Months.namesGenitive[language][date.getMonth() + 1];
}
else {
// @ts-ignore
return time_constants_1.Months.names[language][date.getMonth() + 1] + ' ' + (date.getDate());
}
}
// ještě později
if (language === languages_enum_1.Languages.CZECH) {
// @ts-ignore
return (date.getDate()) + '. ' + time_constants_1.Months.namesGenitive[language][date.getMonth() + 1] + ' ' + (date.getFullYear());
}
else {
// @ts-ignore
return time_constants_1.Months.names[language][date.getMonth() + 1] + ' ' + (date.getDate()) + ', ' + (date.getFullYear());
}
}
// Before now dates
// Do 5 sekund
if (diff < 5) {
return time_constants_1.Words.now[language];
}
// do 1 minuty
if (diff < 60000) {
return time_constants_1.Words.momentAgo[language];
}
// do 1 hodiny
if (diff < 3600000) {
var minutes = Math.round(diff / 60000);
return pluralize_1.pluralize(minutes, time_constants_1.Words.minutesAgo[language]);
}
// do 10 hodin
if (diff < 3600 * 1000 * 10) {
var hours = Math.round(diff / (3600 * 1000));
return pluralize_1.pluralize(hours, time_constants_1.Words.hoursAgo[language]);
}
// do 24 hodin
if (diff < 3600 * 1000 * 24) {
var yesterdayText = '';
if (date.getDay() === now.getDay() - 1) {
yesterdayText = time_constants_1.Words.yesterdayAt[language] + ' ';
}
return yesterdayText + formatTimeOfDay(date);
}
// do 6 dnů
if (diff < 3600 * 1000 * 24 * 6) {
var yesterdayText = '';
if (date.getDay() === now.getDay() - 1) {
yesterdayText = time_constants_1.Words.yesterdayAt[language] + ' ';
}
if (date.getDay() === 6 && now.getDay() === 0) {
yesterdayText = time_constants_1.Words.yesterdayAt[language] + ' ';
}
if (!yesterdayText) {
var dayInWeek = date.getDay();
// @ts-ignore
yesterdayText = time_constants_1.Days.localAt[language][dayInWeek] + ' ';
}
return yesterdayText + formatTimeOfDay(date);
}
var yearStart = new Date();
yearStart.setTime(now.getTime());
yearStart.setDate(1);
yearStart.setMonth(1);
// tento rok
if (yearStart.getFullYear() === date.getFullYear()) {
if (language === languages_enum_1.Languages.CZECH) {
// @ts-ignore
return (date.getDate()) + '. ' + time_constants_1.Months.namesGenitive[language][date.getMonth() + 1];
}
else {
// @ts-ignore
return time_constants_1.Months.names[language][date.getMonth() + 1] + ' ' + (date.getDate());
}
}
// ještě dříve
if (language === languages_enum_1.Languages.CZECH) {
// @ts-ignore
return (date.getDate()) + '. ' + time_constants_1.Months.namesGenitive[language][date.getMonth() + 1] + ' ' + (date.getFullYear());
}
else {
// @ts-ignore
return time_constants_1.Months.names[language][date.getMonth() + 1] + ' ' + (date.getDate()) + ', ' + (date.getFullYear());
}
}
exports.relativeTime = relativeTime;
function formatTimeOfDay(date) {
var m = (date.getMinutes()) + '';
if (m.length === 1) {
m = '0' + m;
}
var h = (date.getHours()) + '';
// if (h.length === 1) {
// h = '0' + h;
// }
return h + ':' + m;
}
//# sourceMappingURL=relative-time.js.map