控制器中的CakePHP TimeHelper(或类似)

时间:2013-12-08 23:53:09

标签: cakephp time formatting

我从包含时间戳的数据库中提取了许多记录,即Cake的自动created字段。我想按原样存储它们,但在某些控制器操作中,我希望将它们重新格式化为“更友好”的格式。

是否有一种Cake方法可以更改日期时间的格式而不改变它的存储方式?

由于

修改

我可以在控制器中完全编写一个循环来修改每个返回的日期时间。我希望有一个更优雅的解决方案。

3 个答案:

答案 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助手一样,只要你可以随意使用它。