我試圖顯示我們的客戶的各個時區和它們從中派生出來的當地時間的列表。現在在我的客戶端模型中,我有以下函數(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