apass-opensdk-hugong
Version:
飞书Apass低代码平台-飞书开放平台-相关的接口整合和常用的方法整合
86 lines (71 loc) • 2.55 kB
JavaScript
class Date_ {
#hg = null
constructor(hg) {
this.#hg = hg
}
dateStringToTimestamp(dateString) {
const timestamp = Date.parse(dateString);
//this.#hg.log4(`dateString=${dateString}, timestamp=${timestamp}`)
return timestamp
}
moment(date) {
const moment = require('moment-timezone');
moment.tz.setDefault("Asia/Shanghai");
moment.updateLocale('en', {
week: {
dow: 1,
doy: 4
}
});
return moment(date || Date.now())
}
format(date,format) {
return this.moment(date).format(format || 'YYYY-MM-DD HH:mm:ss')
}
nowFormat(format) {
return this.moment().format(format || 'YYYY-MM-DD HH:mm:ss')
}
splitDateRange(startDate, endDate, splitMonths) {
// 将输入的日期字符串转换为Date对象
const start = new Date(startDate);
const end = new Date(endDate);
// 检查输入的合法性
if (start >= end) {
throw new Error("开始日期必须早于结束日期");
}
if (splitMonths <= 0) {
throw new Error("分割持续月份必须大于0");
}
// 用于存储分割后的日期范围
const result = [];
// 当前处理的开始日期
let currentStart = new Date(start);
// 计算总月份数
const totalMonths = (end.getFullYear() - currentStart.getFullYear()) * 12 + end.getMonth() - currentStart.getMonth() + 1;
// 循环分割日期范围
while (currentStart < end) {
// 计算当前分割的结束日期
const currentEnd = new Date(currentStart);
currentEnd.setMonth(currentEnd.getMonth() + splitMonths);
// 如果当前分割的结束日期超过了总结束日期,则调整为总结束日期
if (currentEnd > end) {
currentEnd.setTime(end.getTime());
}
// 计算当前分割的持续月份数
const len = (currentEnd.getFullYear() - currentStart.getFullYear()) * 12 + currentEnd.getMonth() - currentStart.getMonth() + 1;
// 计算当前分割的天数
const days = (currentEnd - currentStart) / (1000 * 60 * 60 * 24) + 1;
// 将当前分割的日期范围添加到结果数组中
result.push({
begin: currentStart.toISOString().split("T")[0],
end: currentEnd.toISOString().split("T")[0],
len: len,
days: Math.floor(days) // 向下取整,因为天数应该是整数
});
// 更新当前处理的开始日期为当前分割的结束日期
currentStart = new Date(currentEnd);
}
return result;
}
}
module.exports = Date_