PHP时间将NULL处理为00:00:00

时间:2018-11-09 16:59:01

标签: php mysql date datetime time

我有一个数据库,其时间以public function attendedCourses(array $years = null) { $query = $this->belongsToMany(Course::class, 'course_user'); if ($years) { $query->whereRaw('YEAR(end_date) IN (?)', [ 'years' => implode(',', $years) ]); } return $query; } 格式存储为$user = User::find(123); $user->attendedCourses($years)->external(false)->sum('points'); 。数据库接受TIME,但我还使用将时间转换为12小时格式的函数,仅供查看。

问题是:当时间输入为空时,转换格式的函数会将00:00:00更改为NULL,我可以用,但是我不能让它不打印{ {1}}转换回12小时时。

我需要:

  • 将输入内容以NULL而不是00:00:00的形式输入数据库

OR

  • 12:00 AM转换为12小时时不显示任何内容。

这些是我一直在使用的功能的变体,如果该值是实时的,那么它也可以正常工作。

NULL

1 个答案:

答案 0 :(得分:3)

您在这里滥用strtotime()。您要使用的是PHP的日期格式功能:

function time_24_to_12 ($input) {
    // empty checks for null, empty string, zero, false, unset, etc.
    if (empty($input)) {
        return "";
    }
    $date = DateTime::createFromFormat("H:i:s", $input);
    $time = $date->format("h:i:s A");
    return ($time === "12:00:00 AM") ? "" : $time;
}

function time_12_to_24 ($input) {
    if (empty($input)) {
        return "";
    }
    $date = DateTime::createFromFormat("h:i:s A", $input);
    $time = $date->format("H:i:s");

    return ($time === "00:00:00") ? "" : $time;
}

(如果想花哨的话,可以对输入进行正则表达式检查,而不仅仅是检查是否为空。)

现在这应该可以在您需要的时候使用:

echo time_24_to_12("23:34:29") . "\n";
echo time_24_to_12("00:00:00") . "\n";
echo time_24_to_12("") . "\n";

echo time_12_to_24("11:34:29 PM") . "\n";
echo time_12_to_24("12:00:00 AM") . "\n";
echo time_12_to_24(null) . "\n";

结果:

11:34:29 PM


23:34:29