Open uniquekey-coder opened 1 month ago
/** * 时间日期字段格式化处理. * * @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); }
这里的代码是不是有问题,在数据库配置中, 'datetime_format' => '\app\common\util\ModelDateTime',我传递的类,最终返回的是一个对象。这应该是一个历史遗留问题,在thinkphp view视图中,使用的是 echo $object,会自动调用toString(),但如果不是在view中,就不会调用toString()了,所以 return new $format($time) 会得到结果 “{}”