Initalize
This commit is contained in:
120
node_modules/timeago.js/lib/utils/date.js
generated
vendored
Normal file
120
node_modules/timeago.js/lib/utils/date.js
generated
vendored
Normal file
@@ -0,0 +1,120 @@
|
||||
"use strict";
|
||||
/**
|
||||
* Created by hustcc on 18/5/20.
|
||||
* Contract: i@hust.cc
|
||||
*/
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
var SEC_ARRAY = [
|
||||
60,
|
||||
60,
|
||||
24,
|
||||
7,
|
||||
365 / 7 / 12,
|
||||
12,
|
||||
];
|
||||
/**
|
||||
* format Date / string / timestamp to timestamp
|
||||
* @param input
|
||||
* @returns {*}
|
||||
*/
|
||||
function toDate(input) {
|
||||
if (input instanceof Date)
|
||||
return input;
|
||||
// @ts-ignore
|
||||
if (!isNaN(input) || /^\d+$/.test(input))
|
||||
return new Date(parseInt(input));
|
||||
input = (input || '')
|
||||
// @ts-ignore
|
||||
.trim()
|
||||
.replace(/\.\d+/, '') // remove milliseconds
|
||||
.replace(/-/, '/')
|
||||
.replace(/-/, '/')
|
||||
.replace(/(\d)T(\d)/, '$1 $2')
|
||||
.replace(/Z/, ' UTC') // 2017-2-5T3:57:52Z -> 2017-2-5 3:57:52UTC
|
||||
.replace(/([+-]\d\d):?(\d\d)/, ' $1$2'); // -04:00 -> -0400
|
||||
return new Date(input);
|
||||
}
|
||||
exports.toDate = toDate;
|
||||
/**
|
||||
* format the diff second to *** time ago, with setting locale
|
||||
* @param diff
|
||||
* @param localeFunc
|
||||
* @returns
|
||||
*/
|
||||
function formatDiff(diff, localeFunc) {
|
||||
/**
|
||||
* if locale is not exist, use defaultLocale.
|
||||
* if defaultLocale is not exist, use build-in `en`.
|
||||
* be sure of no error when locale is not exist.
|
||||
*
|
||||
* If `time in`, then 1
|
||||
* If `time ago`, then 0
|
||||
*/
|
||||
var agoIn = diff < 0 ? 1 : 0;
|
||||
/**
|
||||
* Get absolute value of number (|diff| is non-negative) value of x
|
||||
* |diff| = diff if diff is positive
|
||||
* |diff| = -diff if diff is negative
|
||||
* |0| = 0
|
||||
*/
|
||||
diff = Math.abs(diff);
|
||||
/**
|
||||
* Time in seconds
|
||||
*/
|
||||
var totalSec = diff;
|
||||
/**
|
||||
* Unit of time
|
||||
*/
|
||||
var idx = 0;
|
||||
for (; diff >= SEC_ARRAY[idx] && idx < SEC_ARRAY.length; idx++) {
|
||||
diff /= SEC_ARRAY[idx];
|
||||
}
|
||||
/**
|
||||
* Math.floor() is alternative of ~~
|
||||
*
|
||||
* The differences and bugs:
|
||||
* Math.floor(3.7) -> 4 but ~~3.7 -> 3
|
||||
* Math.floor(1559125440000.6) -> 1559125440000 but ~~1559125440000.6 -> 52311552
|
||||
*
|
||||
* More information about the performance of algebraic:
|
||||
* https://www.youtube.com/watch?v=65-RbBwZQdU
|
||||
*/
|
||||
diff = Math.floor(diff);
|
||||
idx *= 2;
|
||||
if (diff > (idx === 0 ? 9 : 1))
|
||||
idx += 1;
|
||||
return localeFunc(diff, idx, totalSec)[agoIn].replace('%s', diff.toString());
|
||||
}
|
||||
exports.formatDiff = formatDiff;
|
||||
/**
|
||||
* calculate the diff second between date to be formatted an now date.
|
||||
* @param date
|
||||
* @param relativeDate
|
||||
* @returns {number}
|
||||
*/
|
||||
function diffSec(date, relativeDate) {
|
||||
var relDate = relativeDate ? toDate(relativeDate) : new Date();
|
||||
return (+relDate - +toDate(date)) / 1000;
|
||||
}
|
||||
exports.diffSec = diffSec;
|
||||
/**
|
||||
* nextInterval: calculate the next interval time.
|
||||
* - diff: the diff sec between now and date to be formatted.
|
||||
*
|
||||
* What's the meaning?
|
||||
* diff = 61 then return 59
|
||||
* diff = 3601 (an hour + 1 second), then return 3599
|
||||
* make the interval with high performance.
|
||||
**/
|
||||
function nextInterval(diff) {
|
||||
var rst = 1, i = 0, d = Math.abs(diff);
|
||||
for (; diff >= SEC_ARRAY[i] && i < SEC_ARRAY.length; i++) {
|
||||
diff /= SEC_ARRAY[i];
|
||||
rst *= SEC_ARRAY[i];
|
||||
}
|
||||
d = d % rst;
|
||||
d = d ? rst - d : rst;
|
||||
return Math.ceil(d);
|
||||
}
|
||||
exports.nextInterval = nextInterval;
|
||||
//# sourceMappingURL=date.js.map
|
||||
Reference in New Issue
Block a user