ts-prime
Version:
A utility library for JavaScript and Typescript.
125 lines (124 loc) • 3.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var deepMerge_1 = require("./deepMerge");
var entries_1 = require("./entries");
var isOneOf_1 = require("./isOneOf");
var parse_1 = require("./parse");
// P.Time.Day(200)
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 = exports.Time || (exports.Time = {}));
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 = deepMerge_1.deepMergeRight(defaultUnit, options || {});
var entriesV = entries_1.entries(merged)
.filter(function (_a) {
var k = _a[0];
return isOneOf_1.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;
}
exports.prettyMs = prettyMs;
/**
*
* @param date
* @param from - {optional} time diff
*/
function prettyTimeDiff(date, from) {
if (from === void 0) { from = Date.now(); }
var validDate = parse_1.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";
}
exports.prettyTimeDiff = prettyTimeDiff;