哈喽,大家好
今天工作中遇到一个问题,需要在数据导出时判断两个时间段不要超过半年的跨度,服务器处理怕受不了😅
原先同事的思路是看两个时间的天数,天数差超过182(356/2)提示超过半年
可业务同学今天反馈不行啊 我要导出后半年的业务数据(2024-07-01 ~ 2024-12-31)提示超过了半年
我仔细一想,对啊 后半年可不止182天!!
这个算法不对,要改,可是怎么改呢?没有好思路就去问问ai😄
起初ai还是给的天数差的算法,可能是为了我的 计算效率,存在误差,我告诉它我要相对准确的。
他给出了计算月份差的方式,但还都是存在问题的,在他的思考过程中,我找到了思路,为何不将开始时间的日期加6个月,同时照顾好月尾天数的控制,更精准的把控加完6个月的那天,不就能判断两个日期超过半年了吗?
于是我把这个想法告诉了ai,它最终给出的结果(当然我稍微改了一下)
function isOverHalfYear(startDate, endDate) {
const start = new Date(startDate);
const end = new Date(endDate);
function addSixMonths(date) {
const result = new Date(date);
result.setMonth(result.getMonth() + 6);
// 处理月末场景
if (date.getDate() !== result.getDate()) {
result.setDate(0); // 设置为上个月最后一天
}
return result;
}
// 计算开始日期+6个月后的日期
const deadline = addSixMonths(start);
// 直接比较日期对象
return end >= deadline;
}
试了试还行,然后ai建议我优化时区偏移问题,于是给了最终版本:
function isOverHalfYear(startDate, endDate) {
const start = new Date(startDate);
const end = new Date(endDate);
function addSixMonths(date) {
const utcDate = new Date(Date.UTC(
date.getFullYear(),
date.getMonth(),
date.getDate()
));
utcDate.setUTCMonth(utcDate.getUTCMonth() + 6);
if (date.getDate() !== utcDate.getUTCDate()) {
utcDate.setUTCDate(0);
}
return new Date(utcDate);
}
// 计算开始日期+6个月后的日期
const deadline = addSixMonths(start);
// 直接比较日期对象
return end >= deadline;
}
拿走不谢 😄
谢谢deepseek提供的思路 嘿嘿
1681

被折叠的 条评论
为什么被折叠?



