@thatcompany/ts-tool
Version:
基于TypeScript编写的工具库
170 lines • 6.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Timer = void 0;
const date_fns_1 = require("date-fns");
class Timer {
/**
* 睡眠函数
* @param {number} millis 毫秒
*/
static async sleep(millis = 0) {
return new Promise((resolve) => setTimeout(() => {
resolve(true);
}, millis));
}
/**
* 格式化时间
* yyyy - 四位年份
* MM - 两位月份(01-12)
* dd - 两位日期(01-31)
* HH - 24小时制小时(00-23)
* hh - 12小时制小时(01-12)
* mm - 分钟(00-59)
* ss - 秒(00-59)
* SSS - 毫秒(000-999)
* MMMM - 月份名称(January, February, …)
* A / a - AM/PM
* @param time 时间
* @param formatStr 时间格式
*/
static format(time = new Date(), formatStr = 'yyyy-MM-dd HH:mm:ss') {
if (typeof time === 'string' || typeof time === 'number') {
time = (0, date_fns_1.parseISO)('' + time);
}
return (0, date_fns_1.format)(time, formatStr);
}
/**
* 计算两个时间之间的差值
* @param start 开始时间
* @param end 结束时间
* @param unit 差值单位,可以是 'ms'(毫秒)、's'(秒)、'm'(分钟)、'h'(小时)、'd'(天)、'M'(月)、'y'(年)
* @returns 返回两个时间之间的差值
*/
static diff(start, end, unit = 'ms') {
// 处理输入为 Date 对象
if (typeof start === 'string' || typeof start === 'number') {
start = (0, date_fns_1.parseISO)('' + start);
}
if (typeof end === 'string' || typeof end === 'number') {
end = (0, date_fns_1.parseISO)('' + end);
}
switch (unit) {
case 'ms':
return (0, date_fns_1.differenceInMilliseconds)(end, start);
case 's':
return (0, date_fns_1.differenceInSeconds)(end, start);
case 'm':
return (0, date_fns_1.differenceInMinutes)(end, start);
case 'h':
return (0, date_fns_1.differenceInHours)(end, start);
case 'd':
return (0, date_fns_1.differenceInDays)(end, start);
case 'M':
return (0, date_fns_1.differenceInMonths)(end, start);
case 'y':
return (0, date_fns_1.differenceInYears)(end, start);
default:
return 0;
}
}
/**
* 判断某个时间是否在另一个时间之前
* @param time1 第一个时间
* @param time2 第二个时间
* @returns 如果 time1 在 time2 之前,返回 true;否则返回 false
*/
static isBefore(time1, time2) {
if (typeof time1 === 'string' || typeof time1 === 'number') {
time1 = (0, date_fns_1.parseISO)('' + time1);
}
if (typeof time2 === 'string' || typeof time2 === 'number') {
time2 = (0, date_fns_1.parseISO)('' + time2);
}
return (0, date_fns_1.isBefore)(time1, time2);
}
/**
* 判断某个时间是否在另一个时间之后
* @param time1 第一个时间
* @param time2 第二个时间
* @returns 如果 time1 在 time2 之后,返回 true;否则返回 false
*/
static isAfter(time1, time2) {
if (typeof time1 === 'string' || typeof time1 === 'number') {
time1 = (0, date_fns_1.parseISO)('' + time1);
}
if (typeof time2 === 'string' || typeof time2 === 'number') {
time2 = (0, date_fns_1.parseISO)('' + time2);
}
return (0, date_fns_1.isAfter)(time1, time2);
}
/**
* 对时间数组进行排序
* @param times 时间数组
* @returns 排序后的时间数组
*/
static sort(times) {
return times.sort((a, b) => (0, date_fns_1.compareAsc)((0, date_fns_1.parseISO)('' + a), (0, date_fns_1.parseISO)('' + b)));
}
/**
* 增加指定的时间量
* @param time 时间
* @param amount 数量
* @param unit 单位,可以是 'ms'、's'、'm'、'h'、'd'、'M'、'y'
* @returns 增加后的时间
*/
static add(time, amount, unit) {
if (typeof time === 'string' || typeof time === 'number') {
time = (0, date_fns_1.parseISO)('' + time);
}
switch (unit) {
case 'ms':
return (0, date_fns_1.addMilliseconds)(time, amount);
case 's':
return (0, date_fns_1.addSeconds)(time, amount);
case 'm':
return (0, date_fns_1.addMinutes)(time, amount);
case 'h':
return (0, date_fns_1.addHours)(time, amount);
case 'd':
return (0, date_fns_1.addDays)(time, amount);
case 'M':
return (0, date_fns_1.addMonths)(time, amount);
case 'y':
return (0, date_fns_1.addYears)(time, amount);
default:
return time;
}
}
/**
* 减少指定的时间量
* @param time 时间
* @param amount 数量
* @param unit 单位,可以是 'ms'、's'、'm'、'h'、'd'、'M'、'y'
* @returns 减少后的时间
*/
static sub(time, amount, unit) {
if (typeof time === 'string' || typeof time === 'number') {
time = (0, date_fns_1.parseISO)('' + time);
}
switch (unit) {
case 'ms':
return (0, date_fns_1.subMilliseconds)(time, amount);
case 's':
return (0, date_fns_1.subSeconds)(time, amount);
case 'm':
return (0, date_fns_1.subMinutes)(time, amount);
case 'h':
return (0, date_fns_1.subHours)(time, amount);
case 'd':
return (0, date_fns_1.subDays)(time, amount);
case 'M':
return (0, date_fns_1.subMonths)(time, amount);
case 'y':
return (0, date_fns_1.subYears)(time, amount);
default:
return time;
}
}
}
exports.Timer = Timer;
//# sourceMappingURL=index.js.map