UNPKG

ts-prime

Version:

A utility library for JavaScript and Typescript.

125 lines (124 loc) 3.7 kB
"use strict"; 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;