UNPKG

zpy-tools

Version:

提供了日期格式化、日期计算、文件格式化、本地缓存处理、Base64转File、File转Base64、节流防抖、数组排序、数据结构转化、深度比较两个对象是否包含相同的值等相关功能

124 lines (112 loc) 3.56 kB
/** * 日期格式化 * * @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 };