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

预订网站24小时提前预订校验问题及代码咨询

解决预订网站的24小时提前预订判断问题

我明白你要实现的逻辑:用户必须提前24小时完成预订,所以当用户提交的日期时间和当前时间的间隔小于24小时时输出“no”,否则输出“yes”。你的代码思路是对的,但逻辑判断部分没写完,而且时间差的计算方向需要调整,我来帮你修正:

首先,核心逻辑要注意:我们需要判断用户选择的时间是否比当前时间晚至少24小时,所以应该用用户时间戳减去当前时间戳,而不是反过来。如果反过来计算,当用户时间在未来时差值会是负数,直接判断会出错。

修正后的完整代码

date_default_timezone_set('Asia/Kolkata');

// 假设$date和$time是用户提交的合法日期(如"2024-05-20")和时间(如"14:30")
$userDateTimeStr = $date . ' ' . $time;
$userTimestamp = strtotime($userDateTimeStr);
$currentTimestamp = strtotime(date('Y-m-d H:i:s'));

// 24小时对应的秒数
$twentyFourHoursInSec = 86400;

// 先验证用户提交的时间格式是否合法
if ($userTimestamp === false) {
    echo "invalid datetime format";
} else {
    // 判断用户选择的时间是否比当前时间晚至少24小时
    if ($userTimestamp - $currentTimestamp >= $twentyFourHoursInSec) {
        echo "yes";
    } else {
        echo "no";
    }
}

关键细节说明

  • 时间差计算方向:必须用$userTimestamp - $currentTimestamp,确保当用户选择未来时间时差值为正,再判断是否达到24小时的秒数阈值。
  • 输入合法性验证:加上$userTimestamp === false的判断,避免用户提交非法格式的日期时间导致strtotime解析失败。
  • 时区一致性:已经设置Asia/Kolkata时区,确保当前时间和用户时间在同一时区下计算,不会出现偏差。

可选:用DateTime类实现(可读性更强)

如果用户提交的日期时间格式固定,也可以用PHP的DateTime类来处理,逻辑更直观:

date_default_timezone_set('Asia/Kolkata');

try {
    $userDateTime = new DateTime($date . ' ' . $time);
    $currentDateTime = new DateTime();
    $timeDiff = $currentDateTime->diff($userDateTime);
    
    // 判断间隔是否至少24小时(跨天或当天满24小时)
    if ($timeDiff->days >= 1 || ($timeDiff->h >= 24 && $timeDiff->days == 0)) {
        echo "yes";
    } else {
        echo "no";
    }
} catch (Exception $e) {
    echo "invalid datetime format";
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:47:53