UNPKG

arayts

Version:

让 TypeScript 开发如丝般顺滑。ArayTS 提供了一套高效、优雅的算法工具集,包含常用的数据结构与算法实现,帮助开发者轻松构建可靠的应用程序。

659 lines (658 loc) 21.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DateUtils = exports.TimeUtils = void 0; var TimeUtils = /** @class */ (function () { function TimeUtils() { } TimeUtils.getFormattedLocalDate = function () { var now = new Date(); return now.toLocaleDateString(); }; TimeUtils.get = function (format) { try { var localDate = TimeUtils.getFormattedLocalDate(); if (!format || format === "YYYY/MM/DD") { return localDate; } else { var localDateArray = localDate.split("/"); format = format.replace(/YYYY/g, localDateArray[0]) .replace(/MM/g, localDateArray[1]) .replace(/DD/g, localDateArray[2]); return format; } } catch (e) { console.log(e); return ''; } }; TimeUtils.range = function (verifiedDate, previousDate, laterDate) { try { var start = new Date(previousDate); var end = laterDate ? new Date(laterDate) : new Date(); var verified = new Date(verifiedDate); return verified >= start && verified <= end; } catch (e) { console.log(e); return false; } }; TimeUtils.days = function (previousDate, laterDate) { try { var localDate = new Date(TimeUtils.getFormattedLocalDate()); var start = new Date(previousDate); var end = laterDate ? new Date(laterDate) : localDate; // 将日期转换为时间戳,计算天数差值,然后转换为天数 var timeDiff = end.getTime() - start.getTime(); return Math.floor(timeDiff / (1000 * 60 * 60 * 24)); } catch (e) { console.log(e); return NaN; } }; TimeUtils.months = function (previousDate, laterDate) { try { var localDate = new Date(TimeUtils.getFormattedLocalDate()); var start = new Date(previousDate); var end = laterDate ? new Date(laterDate) : localDate; var months = (end.getFullYear() - start.getFullYear()) * 12 + (end.getMonth() - start.getMonth()); // 如果结束日期的天数小于开始日期的天数,减去一个月 if (end.getDate() < start.getDate()) { return months - 1; } return months; } catch (e) { console.log(e); return NaN; } }; TimeUtils.years = function (previousDate, laterDate) { try { var start = new Date(previousDate); var end = laterDate ? new Date(laterDate) : new Date(); var years = end.getFullYear() - start.getFullYear(); // 如果结束日期的月份小于开始日期的月份,减去一个年份 if (end.getMonth() < start.getMonth()) { return years - 1; } // 如果月份相同,但结束日期的天数小于开始日期的天数,也减去一个年份 if (end.getMonth() === start.getMonth() && end.getDate() < start.getDate()) { return years - 1; } return years; } catch (e) { console.log(e); return NaN; } }; TimeUtils.order = function (previousDate, laterDate) { try { var start = new Date(previousDate); var end = laterDate ? new Date(laterDate) : new Date(TimeUtils.getFormattedLocalDate()); return start <= end; } catch (e) { console.log(e); return false; } }; /** * 获取当前时间戳(毫秒) */ TimeUtils.timestamp = function () { return Date.now(); }; /** * 获取指定日期的时间戳(毫秒) */ TimeUtils.getTimestamp = function (date) { try { return new Date(date).getTime(); } catch (e) { console.log(e); return 0; } }; /** * 格式化时间为指定格式 * @param format 支持:YYYY-MM-DD HH:mm:ss */ TimeUtils.formatDate = function (date, format) { if (date === void 0) { date = new Date(); } if (format === void 0) { format = 'YYYY-MM-DD HH:mm:ss'; } try { var d = new Date(date); var formatObj_1 = { YYYY: d.getFullYear(), MM: String(d.getMonth() + 1).padStart(2, '0'), DD: String(d.getDate()).padStart(2, '0'), HH: String(d.getHours()).padStart(2, '0'), mm: String(d.getMinutes()).padStart(2, '0'), ss: String(d.getSeconds()).padStart(2, '0') }; return format.replace(/YYYY|MM|DD|HH|mm|ss/g, function (match) { return String(formatObj_1[match]); }); } catch (e) { console.log(e); return ''; } }; /** * 判断是否为同一天 */ TimeUtils.isSameDay = function (date1, date2) { try { var d1 = new Date(date1); var d2 = new Date(date2); return d1.getFullYear() === d2.getFullYear() && d1.getMonth() === d2.getMonth() && d1.getDate() === d2.getDate(); } catch (e) { console.log(e); return false; } }; /** * 获取指定日期是星期几 * @returns 0-6 (0表示星期日) */ TimeUtils.getWeekDay = function (date) { if (date === void 0) { date = new Date(); } try { return new Date(date).getDay(); } catch (e) { console.log(e); return NaN; } }; /** * 获取相对时间描述 */ TimeUtils.getRelativeTime = function (date) { try { var now = Date.now(); var timestamp = new Date(date).getTime(); var diff = now - timestamp; if (diff < 0) { return TimeUtils.formatDate(date); } var minute = 60 * 1000; var hour = 60 * minute; var day = 24 * hour; var month = 30 * day; var year = 12 * month; if (diff < minute) { return '刚刚'; } else if (diff < hour) { return "".concat(Math.floor(diff / minute), "\u5206\u949F\u524D"); } else if (diff < day) { return "".concat(Math.floor(diff / hour), "\u5C0F\u65F6\u524D"); } else if (diff < month) { return "".concat(Math.floor(diff / day), "\u5929\u524D"); } else if (diff < year) { return "".concat(Math.floor(diff / month), "\u4E2A\u6708\u524D"); } else { return "".concat(Math.floor(diff / year), "\u5E74\u524D"); } } catch (e) { console.log(e); return ''; } }; /** * 添加时间 */ TimeUtils.addTime = function (date, num, unit) { try { var d = new Date(date); switch (unit) { case 'year': d.setFullYear(d.getFullYear() + num); break; case 'month': d.setMonth(d.getMonth() + num); break; case 'day': d.setDate(d.getDate() + num); break; case 'hour': d.setHours(d.getHours() + num); break; case 'minute': d.setMinutes(d.getMinutes() + num); break; case 'second': d.setSeconds(d.getSeconds() + num); break; } return d; } catch (e) { console.log(e); return new Date(); } }; return TimeUtils; }()); exports.TimeUtils = TimeUtils; var DateUtils = /** @class */ (function () { function DateUtils() { } /** * 格式化日期 */ DateUtils.format = function (date, format) { if (format === void 0) { format = DateUtils.DEFAULT_FORMAT; } var d = new Date(date); if (isNaN(d.getTime())) return ''; var formatMap = { 'YYYY': d.getFullYear(), 'MM': DateUtils.padZero(d.getMonth() + 1), 'DD': DateUtils.padZero(d.getDate()), 'HH': DateUtils.padZero(d.getHours()), 'mm': DateUtils.padZero(d.getMinutes()), 'ss': DateUtils.padZero(d.getSeconds()), 'SSS': DateUtils.padZero(d.getMilliseconds(), 3) }; return Object.entries(formatMap).reduce(function (result, _a) { var key = _a[0], value = _a[1]; return result.replace(new RegExp(key, 'g'), String(value)); }, format); }; /** * 解析日期字符串 */ DateUtils.parse = function (dateStr, format) { if (format === void 0) { format = DateUtils.DEFAULT_FORMAT; } // 处理日期和时间部分 var _a = dateStr.split(' '), datePart = _a[0], timePart = _a[1]; // 解析日期 var dateParts = datePart.split(/[/-]/); if (dateParts.length !== 3) { throw new Error('Invalid date format'); } var year = parseInt(dateParts[0]); var month = parseInt(dateParts[1]) - 1; // 月份从0开始 var day = parseInt(dateParts[2]); // 创建日期对象,默认时间为0 var date = new Date(year, month, day); // 如果有时间部分,解析并设置时间 if (timePart) { var timeParts = timePart.split(':'); if (timeParts.length >= 1) date.setHours(parseInt(timeParts[0])); if (timeParts.length >= 2) date.setMinutes(parseInt(timeParts[1])); if (timeParts.length >= 3) date.setSeconds(parseInt(timeParts[2])); } return date; }; /** * 日期比较 */ DateUtils.compare = function (date1, date2) { var d1 = new Date(date1); var d2 = new Date(date2); return d1.getTime() - d2.getTime(); }; /** * 日期加减 */ DateUtils.add = function (date, amount, unit) { var d = new Date(date); switch (unit) { case 'year': d.setFullYear(d.getFullYear() + amount); break; case 'month': d.setMonth(d.getMonth() + amount); break; case 'day': d.setDate(d.getDate() + amount); break; case 'hour': d.setHours(d.getHours() + amount); break; case 'minute': d.setMinutes(d.getMinutes() + amount); break; case 'second': d.setSeconds(d.getSeconds() + amount); break; } return d; }; /** * 获取时间差 */ DateUtils.diff = function (date1, date2, unit) { var d1 = new Date(date1); var d2 = new Date(date2); var diff = d2.getTime() - d1.getTime(); switch (unit) { case 'year': return DateUtils.diffYears(d1, d2); case 'month': return DateUtils.diffMonths(d1, d2); case 'day': return Math.floor(diff / (1000 * 60 * 60 * 24)); case 'hour': return Math.floor(diff / (1000 * 60 * 60)); case 'minute': return Math.floor(diff / (1000 * 60)); case 'second': return Math.floor(diff / 1000); default: return diff; } }; /** * 是否为有效日期 */ DateUtils.isValid = function (date) { if (!date) return false; var d = new Date(date); return !isNaN(d.getTime()); }; /** * 是否为闰年 */ DateUtils.isLeapYear = function (year) { return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; }; /** * 获取月份天数 */ DateUtils.getDaysInMonth = function (year, month) { return new Date(year, month + 1, 0).getDate(); }; /** * 获取日期范围 */ DateUtils.getDateRange = function (start, end) { var dates = []; var current = new Date(start); var endDate = new Date(end); while (current <= endDate) { dates.push(new Date(current)); current = DateUtils.add(current, 1, 'day'); } return dates; }; /** * 获取月份范围内的所有月份 */ DateUtils.getMonthRange = function (startDate, endDate) { var months = []; var current = new Date(startDate); var end = new Date(endDate); while (current <= end) { months.push(new Date(current)); current.setMonth(current.getMonth() + 1); } return months; }; /** * 按周对日期进行分组 */ DateUtils.groupByWeek = function (dates) { var sortedDates = dates .map(function (d) { return new Date(d); }) .sort(function (a, b) { return a.getTime() - b.getTime(); }); var weeks = []; var currentWeek = []; for (var _i = 0, sortedDates_1 = sortedDates; _i < sortedDates_1.length; _i++) { var date = sortedDates_1[_i]; if (currentWeek.length === 0) { currentWeek.push(date); } else { var firstDate = currentWeek[0]; if (DateUtils.isSameWeek(firstDate, date)) { currentWeek.push(date); } else { weeks.push(currentWeek); currentWeek = [date]; } } } if (currentWeek.length > 0) { weeks.push(currentWeek); } return weeks; }; /** * 判断两个日期是否在同一周 */ DateUtils.isSameWeek = function (date1, date2) { var d1 = new Date(date1); var d2 = new Date(date2); var weekStart1 = DateUtils.startOfWeek(d1); var weekStart2 = DateUtils.startOfWeek(d2); return weekStart1.getTime() === weekStart2.getTime(); }; /** * 获取指定年月的所有日期 */ DateUtils.getDatesInMonth = function (year, month) { var dates = []; var firstDay = new Date(year, month - 1, 1); var lastDay = new Date(year, month, 0); for (var d = firstDay; d <= lastDay; d.setDate(d.getDate() + 1)) { dates.push(new Date(d)); } return dates; }; /** * 获取日期是当年的第几周 */ DateUtils.getWeekOfYear = function (date) { var d = new Date(date); d.setHours(0, 0, 0, 0); d.setDate(d.getDate() + 3 - (d.getDay() + 6) % 7); var week1 = new Date(d.getFullYear(), 0, 4); return 1 + Math.round(((d.getTime() - week1.getTime()) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7); }; /** * 获取两个日期之间的季度列表 */ DateUtils.getQuarterRange = function (startDate, endDate) { var quarters = []; var start = new Date(startDate); var end = new Date(endDate); var currentDate = new Date(start); while (currentDate <= end) { quarters.push({ year: currentDate.getFullYear(), quarter: DateUtils.getQuarter(currentDate) }); // 移动到下一个季度 currentDate.setMonth(currentDate.getMonth() + 3); } return quarters; }; /** * 获取指定日期的节假日信息(示例) */ DateUtils.getHoliday = function (date) { var d = new Date(date); var month = d.getMonth() + 1; var day = d.getDate(); // 这里可以根据实际需求扩展更多节日 var holidays = { '1-1': '元旦', '5-1': '劳动节', '10-1': '国庆节' }; var key = "".concat(month, "-").concat(day); return holidays[key] || null; }; /** * 格式化时间段 */ DateUtils.formatDuration = function (milliseconds) { var seconds = Math.floor(milliseconds / 1000); var minutes = Math.floor(seconds / 60); var hours = Math.floor(minutes / 60); var days = Math.floor(hours / 24); if (days > 0) return "".concat(days, "\u5929").concat(hours % 24, "\u5C0F\u65F6"); if (hours > 0) return "".concat(hours, "\u5C0F\u65F6").concat(minutes % 60, "\u5206\u949F"); if (minutes > 0) return "".concat(minutes, "\u5206\u949F").concat(seconds % 60, "\u79D2"); return "".concat(seconds, "\u79D2"); }; /** * 获取相对时间描述 */ DateUtils.getRelativeTime = function (date) { var d = new Date(date); var now = new Date(); var diff = now.getTime() - d.getTime(); var diffMinutes = Math.floor(diff / (1000 * 60)); var diffHours = Math.floor(diff / (1000 * 60 * 60)); var diffDays = Math.floor(diff / (1000 * 60 * 60 * 24)); if (diffMinutes < 1) return '刚刚'; if (diffMinutes < 60) return "".concat(diffMinutes, "\u5206\u949F\u524D"); if (diffHours < 24) return "".concat(diffHours, "\u5C0F\u65F6\u524D"); if (diffDays < 30) return "".concat(diffDays, "\u5929\u524D"); return DateUtils.format(d); }; // 私有辅助方法 DateUtils.padZero = function (num, length) { if (length === void 0) { length = 2; } return String(num).padStart(length, '0'); }; DateUtils.diffYears = function (d1, d2) { var years = d2.getFullYear() - d1.getFullYear(); if (d2.getMonth() < d1.getMonth() || (d2.getMonth() === d1.getMonth() && d2.getDate() < d1.getDate())) { return years - 1; } return years; }; DateUtils.diffMonths = function (d1, d2) { var months = (d2.getFullYear() - d1.getFullYear()) * 12 + d2.getMonth() - d1.getMonth(); if (d2.getDate() < d1.getDate()) { return months - 1; } return months; }; /** * 获取日期的开始时间(00:00:00) */ DateUtils.startOfDay = function (date) { var d = new Date(date); d.setHours(0, 0, 0, 0); return d; }; /** * 获取日期的结束时间(23:59:59) */ DateUtils.endOfDay = function (date) { var d = new Date(date); d.setHours(23, 59, 59, 999); return d; }; /** * 获取月份的第一天 */ DateUtils.startOfMonth = function (date) { var d = new Date(date); d.setDate(1); d.setHours(0, 0, 0, 0); return d; }; /** * 获取月份的最后一天 */ DateUtils.endOfMonth = function (date) { var d = new Date(date); d.setMonth(d.getMonth() + 1, 0); d.setHours(23, 59, 59, 999); return d; }; /** * 获取日期是第几季度 */ DateUtils.getQuarter = function (date) { var d = new Date(date); return Math.floor(d.getMonth() / 3) + 1; }; /** * 获取工作日信息(周末返回false) */ DateUtils.isWorkday = function (date) { var d = new Date(date); var day = d.getDay(); return day !== 0 && day !== 6; }; /** * 获取两个日期之间的工作日数量 */ DateUtils.getWorkdayCount = function (startDate, endDate) { var dates = DateUtils.getDateRange(startDate, endDate); return dates.filter(function (date) { return DateUtils.isWorkday(date); }).length; }; /** * 获取日期所在周的周一 */ DateUtils.startOfWeek = function (date) { var d = new Date(date); var day = d.getDay() || 7; d.setDate(d.getDate() - (day - 1)); d.setHours(0, 0, 0, 0); return d; }; /** * 获取日期所在周的周日 */ DateUtils.endOfWeek = function (date) { var d = new Date(date); var day = d.getDay() || 7; d.setDate(d.getDate() + (7 - day)); d.setHours(23, 59, 59, 999); return d; }; /** * 获取年龄 */ DateUtils.getAge = function (birthDate) { var birth = new Date(birthDate); var now = new Date(); var age = now.getFullYear() - birth.getFullYear(); var monthDiff = now.getMonth() - birth.getMonth(); if (monthDiff < 0 || (monthDiff === 0 && now.getDate() < birth.getDate())) { age--; } return age; }; DateUtils.DEFAULT_FORMAT = 'YYYY/MM/DD'; DateUtils.TIME_FORMAT = 'HH:mm:ss'; DateUtils.FULL_FORMAT = 'YYYY/MM/DD HH:mm:ss'; return DateUtils; }()); exports.DateUtils = DateUtils;