我有一个数据库,其时间以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
答案 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