Я пытаюсь показать список различных часовых поясов нашего клиента и их локальное время, которое происходит от этого. Прямо сейчас в моей модели клиента у меня есть следующая функция (doAfterFind), которая представляет собой всего лишь оболочку afterFind, которая дает согласованный формат.Paginator sort on afterFind field
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/en/date-and-time-functions.html#function_convert-tz в виртуальном поле. – burzum