ts-prime
Version:
A utility library for JavaScript and Typescript.
121 lines (120 loc) • 3.51 kB
JavaScript
import { deepMergeRight } from "./deepMerge";
import { entries } from "./entries";
import { isOneOf } from "./isOneOf";
import { toDate } from "./parse";
// P.Time.Day(200)
export var Time;
(function (Time) {
/**
* Converts seconds to milliseconds
*/
function Second(seconds) {
return seconds * 1000;
}
Time.Second = Second;
/**
* Converts minutes to milliseconds
*/
function Minute(minutes) {
return Second(minutes) * 60;
}
Time.Minute = Minute;
/**
* Converts hours to milliseconds
*/
function Hour(h) {
return Minute(h) * 60;
}
Time.Hour = Hour;
/**
* Converts days to milliseconds
*/
function Day(d) {
return Hour(d) * 24;
}
Time.Day = Day;
})(Time || (Time = {}));
export function prettyMs(milliseconds, options) {
var seconds = Math.floor(milliseconds / 1000);
var d_seconds = Math.floor(milliseconds / 1000) % 60;
var minutes = (seconds - d_seconds) / 60;
var d_minutes = minutes % 60;
var hours = (minutes - d_minutes) / 60;
var d_hours = hours % 24;
var days = (hours - d_hours) / 24;
var val = {
seconds: d_seconds,
minutes: d_minutes,
hours: d_hours,
days: days
};
var defaultUnit = {
days: { unit: 'd' },
hours: { unit: 'h' },
minutes: { unit: 'min' },
seconds: { unit: 's' }
};
var merged = deepMergeRight(defaultUnit, options || {});
var entriesV = entries(merged)
.filter(function (_a) {
var k = _a[0];
return isOneOf(k, ['days', 'hours', 'minutes', 'seconds']);
})
.filter(function (_a) {
var k = _a[0];
return val[k];
})
.map(function (_a) {
var k = _a[0], v = _a[1];
return "" + val[k] + v.unit;
}).join(" ");
return entriesV;
}
/**
*
* @param date
* @param from - {optional} time diff
*/
export function prettyTimeDiff(date, from) {
if (from === void 0) { from = Date.now(); }
var validDate = toDate(date);
if (validDate == null) {
throw new Error(date + " is not valid date format");
}
var dateDiff = (from - validDate.getTime());
var delta = Math.floor(dateDiff / 1000);
var minute = 60, hour = minute * 60, day = hour * 24;
if (delta > 0) {
if (delta < 30)
return 'just now';
if (delta < minute)
return delta + ' seconds ago';
if (delta < 2 * minute)
return 'a minute ago';
if (delta < hour)
return Math.floor(delta / minute) + ' minutes ago';
if (Math.floor(delta / hour) == 1)
return '1 hour ago';
if (delta < day)
return Math.floor(delta / hour) + ' hours ago';
if (delta < day * 2)
return 'yesterday';
return Math.floor(delta / day) + ' days ago';
}
var posDelta = Math.abs(delta);
if (posDelta < 30)
return 'just now';
if (posDelta < minute)
return "after " + delta + " seconds";
if (posDelta < 2 * minute)
return 'after one minute';
if (posDelta < hour)
return "after " + Math.floor(posDelta / minute) + " minutes";
if (Math.floor(posDelta / hour) == 1)
return 'after one hour';
if (posDelta < day)
return "after " + Math.floor(posDelta / hour) + " hours";
if (posDelta < day * 2)
return 'tomorrow';
return "after " + Math.floor(delta / day) + " days";
}