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

PHP能否对数组类型的time输入使用strtotime()转换12小时制时间

问题修复说明

你代码的核心错误是遍历取值错误,把课程名称字段当成了时间字段做格式转换,同时时间数组的处理逻辑混乱,修正方案如下:

  1. 遍历数组时,要根据下标取对应行的time_start和time_end提交值做格式转换
  2. HTML5的time输入控件默认提交24小时制的HH:mm格式字符串,可直接传入strtotime解析,用date('h:i a')即可输出带am/pm标识的12小时制时间
  3. 原代码存在SQL注入风险,建议改用预处理语句写入数据

修正后的PHP处理代码

if(isset($_POST['sectionbtn']))
{
    $section = $_POST['section'];
    $level_id = $_POST['level_id'];
    $stats = 0;
    
    // 插入学段信息,建议后续也改为预处理写法
    $sql3 = "INSERT INTO std_section (year_level_id, section, stats) VALUES ('$level_id', '$section', '$stats')";
    if ($db->query($sql3) === TRUE) {
        $sec_id = $db->insert_id;
        $subject = $_POST['subject'];
        $time_start = $_POST['time_start'];
        $time_end = $_POST['time_end'];
        $day = $_POST['day'];

        // 预处理写入课程时间,避免SQL注入
        $stmt = $db->prepare("INSERT INTO std_subject(subject, time_start, time_end, section_id, day) VALUES (?, ?, ?, ?, ?)");
        foreach($subject as $key => $sub_name)
        {
            // 转换时间格式
            $formatted_start = date('h:i a', strtotime($time_start[$key]));
            $formatted_end = date('h:i a', strtotime($time_end[$key]));
            // 绑定参数执行写入
            $stmt->bind_param("sssis", $sub_name, $formatted_start, $formatted_end, $sec_id, $day[$key]);
            $stmt->execute();
        }
        $stmt->close();
    }
}

额外说明

如果你的数据库时间字段是 datetime 类型,不建议直接存储12小时制字符串,可存储24小时制的标准时间格式,前端读取的时候再做格式转换,后续做时间比较、排序等操作会更方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:18:03