我试图显示我们的客户的各个时区和它们从中派生出来的当地时间的列表。现在在我的客户端模型中,我有以下函数(doAfterFind),它只是afterFind的一个包装,它提供了一致的格式。Paginator排序在afterFind字段
public function doAfterFind($result = array()) {
$result = parent::doAfterFind($result);
if (!empty($result['timezone'])) {
App::uses('CakeTime', 'Utility');
$result['local_time'] = CakeTime::format(
VIEW_DATE_FORMAT,
strtotime('now'),
null,
$result['timezone']
);
}
return $result;
}
的local_time
字段被正确放置在模型的查找()之后。我试图将其作为虚拟领域来实现,因为它需要进行排序。问题是我无法弄清楚如何根据当前时间和客户端的时区来计算时间。我已经在模型的构造函数中尝试了相同的操作并将其添加到virtualFields数组中,但时区在构造函数调用期间不可用 - 因为没有加载标识或任何内容。
有没有人知道一种方法来让MySQL计算这个,或者使用我已经有的东西,但是作为一个与Paginator sort()兼容的虚拟字段?我可以在视图中格式化日期显示,但需要本地时间列可排序。
说明: 我的时区存储为区域设置名称(America/New_York等)。 常量VIEW_DATE_FORMAT只是日期()格式字符串F jS, Y - g:i A
。
在虚拟字段中尝试此功能http://dev.mysql.com/doc/refman/5.5/zh-CN/date-and-time-functions.html#function_convert-tz。 – burzum 2014-09-03 16:10:30