我正在尝试显示我们客户的各个时区及其本地时间的列表。现在在我的客户端模型中,我有以下函数(doAfterFind),它只是 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
字段在 find() 之后正确放置在模型中。我也尝试将其实现为虚拟字段,因为它需要进行排序。问题是我不知道如何根据当前时间和客户的时区计算时间。我在模型的构造函数中尝试了相同的方法并将其添加到 virtualFields 数组中,但是在构造函数调用期间时区不可用 - 因为没有加载任何 ID 或任何东西。
有谁知道让 MySQL 计算这个的方法,或者使用我已经拥有的但作为与 Paginator sort() 兼容的虚拟字段的方法?我可以格式化视图中的日期显示,但需要本地时间列是可排序的。
注意:我的时区存储为区域设置名称(America/New_York 等...)。常量 VIEW_DATE_FORMAT 只是 date() 格式字符串F jS, Y - g:i A
。