zpy-tools
Version:
提供了日期格式化、日期计算、文件格式化、本地缓存处理、Base64转File、File转Base64、节流防抖、数组排序、数据结构转化、深度比较两个对象是否包含相同的值等相关功能
124 lines (112 loc) • 3.56 kB
JavaScript
/**
* 日期格式化
*
* @param {Date} now 日期对象
* @param {String} format 格式化字符串,默认为 "YYYY-MM-DD HH:mm:ss"
* @returns {String} 格式化后的日期字符串
*/
function dateFormat(now, format = "YYYY-MM-DD HH:mm:ss") {
if (!(now instanceof Date)) {
throw new Error("The first argument must be a Date object");
}
let year = now.getFullYear();
let month = String(now.getMonth() + 1).padStart(2, "0");
let day = String(now.getDate()).padStart(2, "0");
let hour = String(now.getHours()).padStart(2, "0");
let minute = String(now.getMinutes()).padStart(2, "0");
let second = String(now.getSeconds()).padStart(2, "0");
return format
.replace("YYYY", year)
.replace("MM", month)
.replace("DD", day)
.replace("HH", hour)
.replace("mm", minute)
.replace("ss", second);
}
/**
* 获取两个日期之间的时间差
*
* @param {Date} date1 日期1
* @param {Date} date2 日期2
* @param {String} unit 时间单位,可选值:'year', 'month', 'day', 'hour', 'minute', 'second'(默认)
* @param {Number} decimal 保留小数位数,默认为 2
* @returns {Number} 时间差
*/
function dateDiff(date1, date2, unit = "second", decimal = 2) {
if (!(date1 instanceof Date) || !(date2 instanceof Date)) {
throw new Error("Both arguments must be Date objects");
}
const differenceInMilliseconds = Math.abs(date1.getTime() - date2.getTime());
let result = 0;
switch (unit.toLowerCase()) {
case "week":
result = differenceInMilliseconds / (1000 * 60 * 60 * 24 * 7);
break;
case "day":
result = differenceInMilliseconds / (1000 * 60 * 60 * 24);
break;
case "hour":
result = differenceInMilliseconds / (1000 * 60 * 60);
break;
case "minute":
result = differenceInMilliseconds / (1000 * 60);
break;
case "second":
result = differenceInMilliseconds / 1000;
break;
default:
throw new Error(`Invalid time unit: ${unit}`);
}
return Number(result.toFixed(decimal));
}
/**
* 日期浮动计算
*
* @param {Date} date 日期对象
* @param {String} unit 浮动的单位,可选值:'year', 'month', 'day', 'hour', 'minute', 'second'
* @param {Number} value 浮动的值
* @returns {Date} 浮动后的日期对象
*/
function dateFloat(date, unit, value) {
if (!(date instanceof Date)) {
throw new Error('The first argument must be a Date object');
}
if (!value) {
throw new Error('The third argument cannot be empty');
}
let format, result = new Date(date);
switch (unit.toLowerCase()) {
case 'year':
format = 'YYYY'
result.setFullYear(result.getFullYear() + value);
break;
case 'month':
format = 'YYYY-MM'
result.setMonth(result.getMonth() + value);
break;
case 'day':
format = 'YYYY-MM-DD'
result.setDate(result.getDate() + value);
break;
case 'hour':
format = 'YYYY-MM-DD HH'
result.setHours(result.getHours() + value);
break;
case 'minute':
format = 'YYYY-MM-DD HH:mm'
result.setMinutes(result.getMinutes() + value);
break;
case 'second':
format = 'YYYY-MM-DD HH:mm:ss'
result.setSeconds(result.getSeconds() + value);
break;
default:
throw new Error(`Invalid unit: ${unit}`);
}
return dateFormat(result, format);
}
module.exports = {
dateFormat,
dateDiff,
dateFloat
};