js判断两个日期是否超过半年

哈喽,大家好

今天工作中遇到一个问题,需要在数据导出时判断两个时间段不要超过半年的跨度,服务器处理怕受不了😅

原先同事的思路是看两个时间的天数,天数差超过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提供的思路  嘿嘿

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值