arayts
Version:
让 TypeScript 开发如丝般顺滑。ArayTS 提供了一套高效、优雅的算法工具集,包含常用的数据结构与算法实现,帮助开发者轻松构建可靠的应用程序。
659 lines (658 loc) • 21.5 kB
JavaScript
"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;