You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP产品预约数据处理:最近预约日期查找及预约数量指定日期后归零的实现问题

解决产品预约日期判断及数量状态逻辑问题

嘿,我看你在处理ID3139产品的预约库存逻辑时卡壳了——既要找到最近的预约日期,又要准确判断3件产品在2040-06-13前后的预约状态。我来帮你把这两个问题理顺,先从你现有的脚本问题说起,再补全状态判断的逻辑。

一、修正“查找最近预约日期”的脚本

你的原函数里计算日期间隔的方式有问题:abs(strtotime($date) > strtotime($day))得到的是布尔值转成的0或1,没法真实反映两个日期之间的时间差。而且没有过滤掉当前日期之前的过期预约,可能会返回已经失效的日期。

这里给你调整后的函数,它会只考虑当前日期及之后的预约日期,然后找到距离最近的那一个:

function find_closest_appointment_date($appointment_dates, $current_date) {
    $closest_date = null;
    $min_interval = PHP_INT_MAX;
    $current_timestamp = strtotime($current_date);

    foreach($appointment_dates as $date) {
        $date_timestamp = strtotime($date);
        // 跳过当前日期之前的过期预约(如果需要包含当天,改成>=即可)
        if ($date_timestamp < $current_timestamp) {
            continue;
        }
        // 计算时间戳差值,得到真实的日期间隔
        $interval = abs($current_timestamp - $date_timestamp);
        if ($interval < $min_interval) {
            $min_interval = $interval;
            $closest_date = $date;
        }
    }

    return $closest_date;
}

二、实现“预约数量随截止日期切换”的逻辑

针对你提到的“3件产品在2040-06-13前保持预约状态,之后数量归零”的需求,我们可以写一个单独的函数来处理日期判断和数量返回,这样后续如果截止日期或预约数量有变动,直接修改参数即可:

function get_appointment_quantity($target_date, $appointment_end_date = '2040-06-13', $reserved_quantity = 3) {
    $target_timestamp = strtotime($target_date);
    $end_timestamp = strtotime($appointment_end_date);

    // 目标日期在截止日期之前(包含当天)返回预约数量,之后返回0
    if ($target_timestamp <= $end_timestamp) {
        return $reserved_quantity;
    } else {
        return 0;
    }
}

三、结合使用示例

把两个函数结合起来,就能完整实现你的需求了。这里给你一个使用示例(假设你已经从数据库拿到了ID3139的所有预约日期数组):

// 模拟从数据库获取的ID3139预约日期数组
$appointment_dates = ['2021-12-29', '2022-01-05', '2040-06-13'];
$current_date = date('Y-m-d'); // 获取当前系统日期

// 查找最近的有效预约日期
$closest_date = find_closest_appointment_date($appointment_dates, $current_date);
echo "最近的预约日期:" . $closest_date . "\n";

// 获取当前日期的预约数量
$current_quantity = get_appointment_quantity($current_date);
echo "当前预约数量:" . $current_quantity . "\n";

// 测试2040-06-14的预约数量(应该返回0)
$future_quantity = get_appointment_quantity('2040-06-14');
echo "2040-06-14的预约数量:" . $future_quantity . "\n";

这样运行后,就能准确得到你需要的最近预约日期,以及任意日期对应的预约数量状态了。

内容的提问来源于stack exchange,提问作者Blaaszka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 19:37:45