Closed
Description
/**
* 时间日期字段格式化处理.
*
* @param mixed $format 日期格式
* @param mixed $time 时间日期表达式
* @param bool $timestamp 时间表达式是否为时间戳
*
* @return mixed
*/
protected function formatDateTime($format, $time = 'now', bool $timestamp = false)
{
if (empty($time)) {
return $time;
}
if (false === $format) {
return $time;
} elseif (str_contains($format, '\\')) {
//如果$format传递的是类,这里返回的是类实例化的对象?是否应该是 return (string)new $format($time);调用__toString()方法
return new $format($time);
}
if ($time instanceof DateTimeInterface) {
$dateTime = $time;
} elseif ($timestamp) {
$dateTime = new DateTime();
$dateTime->setTimestamp(is_numeric($time) ? (int) $time : strtotime($time));
} else {
$dateTime = new DateTime($time);
}
return $dateTime->format($format);
}
这里的代码是不是有问题,在数据库配置中, 'datetime_format' => '\app\common\util\ModelDateTime',我传递的类,最终返回的是一个对象。这应该是一个历史遗留问题,在thinkphp view视图中,使用的是 echo $object,会自动调用__toString(),但如果不是在view中,就不会调用__toString()了,所以 return new $format($time) 会得到结果 “{}”
if (false === $format) {
return $time;
} elseif (str_contains($format, '\\')) {
//如果$format传递的是类,这里返回的是类实例化的对象?是否应该是 return (string)new $format($time);调用__toString()方法
return new $format($time);
}
Metadata
Metadata
Assignees
Labels
No labels