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

PHP中date_end为空值时if判断失效 日期格式显示异常修复

问题根因

原代码逻辑存在三个实打实的问题:

  • 判断条件覆盖不全:仅校验了$_POST['date_end']等于字符串'0000-00-00'的场景,完全没有覆盖前端传空字符串、null、未传参的情况——这类值写入MySQL的date类型字段时会被存为NULL,而PHP松散比较规则下null == '0000-00-00'返回false,因此判断永远不成立,逻辑始终进入else分支。
  • 无效日期无兜底处理:当date_end为空值时,strtotime()解析失败会返回false,传入date()函数后会被识别为时间戳0(即1970年1月1日),最终拼接出的日期自然会带出01这类异常日值。
  • 入库操作不符合安全规范:直接将原生$_POST参数传入$wpdb->insert,未做转义和校验,存在SQL注入风险。
修复方案

补全判断逻辑,将所有无效结束日期场景统一归到单日期输出分支,同时补上安全校验,顺手修复原逻辑未覆盖的跨月、跨年活动日期展示错误:

  • 入库前先用WordPress自带的sanitize_text_field清理输入参数,insert操作时指定字段格式占位符,从根源规避注入风险
  • 结束日期判断同时覆盖三类无效场景:值为空、值为'0000-00-00'、strtotime解析失败返回false
  • 日期间隔展示增加层级判断:同年同月仅拼接结束日,同年跨月补充结束月份,跨年直接展示完整起止日期,避免格式错误
修复后代码
// 读取并清理前端提交参数
$event_title = sanitize_text_field($_POST['title']);
$date_start  = sanitize_text_field($_POST['date_start']);
$date_end    = sanitize_text_field($_POST['date_end']);
$country     = sanitize_text_field($_POST['country']);

// 安全入库,通过占位符指定字段格式做转义
$wpdb->insert(
    "events",
    array(
        "title"      => $event_title,
        "date_start" => $date_start,
        "date_end"   => $date_end,
        "country"    => $country
    ),
    array('%s', '%s', '%s', '%s')
);

$ts_start = strtotime($date_start);
$ts_end   = strtotime($date_end);

// 覆盖所有无效结束日期场景
if (empty($date_end) || $date_end == '0000-00-00' || $ts_end === false) {
    $event_date = date('F d, Y', $ts_start);
} else {
    // 按日期跨度匹配对应展示格式
    if (date('Y', $ts_start) === date('Y', $ts_end)) {
        if (date('F', $ts_start) === date('F', $ts_end)) {
            // 同年同月:仅拼接结束日
            $event_date = date('F d - ', $ts_start) . date('d, Y', $ts_end);
        } else {
            // 同年跨月:拼接结束月+日
            $event_date = date('F d - ', $ts_start) . date('F d, Y', $ts_end);
        }
    } else {
        // 跨年:拼接完整起止日期
        $event_date = date('F d, Y - ', $ts_start) . date('F d, Y', $ts_end);
    }
}

修复后只要结束日期为空、格式非法或为0000-00-00,都会正常输出单日期格式;存在有效结束日期时会自动根据日期跨度匹配展示格式,不会出现1970年相关的异常日期值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:24:10