我从包含时间戳的数据库中提取了许多记录,即Cake的自动created
字段。我想按原样存储它们,但在某些控制器操作中,我希望将它们重新格式化为“更友好”的格式。
是否有一种Cake方法可以更改日期时间的格式而不改变它的存储方式?
由于
修改
我可以在控制器中完全编写一个循环来修改每个返回的日期时间。我希望有一个更优雅的解决方案。
答案 0 :(得分:1)
你是对的,你应该将它们保存在数据库中。
最简单的方法是使用PHP的date()
函数。例如。输出dd / mm / YYYY:
<?php echo date('d/m/Y', strtotime($your_datetime_field)); ?>
为了在大型应用程序中保持一致性,您可能希望使用中央源来格式化时间,例如: CakePHP的TimeHelper,因此您只需在一个地方更改格式。之前我没有使用过这个帮助器,因为我不需要经过PHP的内置函数,但看起来你仍然指定了日期格式。我敢肯定,如果它没有默认为你喜欢的东西,那么很容易修改它。这个帮助程序的强大之处在于灵活的功能,输出/返回选项和SQL兼容性选项。
对于大多数PHP的内置函数来说,它似乎只是一个简单的包装器,可以节省编码时间。
E.g:
// inbuilt - get timestamp
$timestamp = strtotime($yourdate);
// cake helper
$timestamp = $this->Time->fromString($yourdate);
// inbuilt - get timestamp for 3 days away
$timestamp = strtotime($yourdate . ' + 3 days');
// cake helper
$timestamp = $this->Time->fromString('+3 days');
对比较和检查日期似乎也很有用。
文档:
答案 1 :(得分:1)
您可以在控制器中加载CakeTime Utility,
caketime实用程序包含CakeTime Helper中的所有函数
App::uses('CakeTime', 'Utility');
CakeTime::timeAgoInWords('2014-04-01 00:15:20');
答案 2 :(得分:0)
您可以在模型的afterFind回调中设置日期格式。从CakePHP手册:
使用此回调修改从a返回的结果 查找操作,或执行任何其他后查找逻辑。 $结果 传递给此回调的参数包含从中返回的结果 模型的查找操作。
例如,如果您想更改日期格式,可以这样做:
public function afterFind($results, $primary = false) {
App::uses('CakeTime', 'Utility');
foreach ($results as $key => $val) {
if (isset($val['Event']['created'])) {
$results[$key]['Event']['created'] = CakeTime::format($val['Event']['created'], '%d-%m-%Y');
}
}
return $results;
}
如您所见,我使用CakeTime实用程序格式化日期。它和Time助手一样,只要你可以随意使用它。