Koc
Новичок
Имеется:
1. база проекта, все даты в ней за редким исключением - MySQL DATETIME, Europe/Moscow (server setting). Исключение - пара таблиц в MySQL DATETIME Utc
2. пользователи, у которых в настройках указана таймзона
3. Symfony2, Doctrine2.
Что нужно:
4. большинство контента выводится относительно таймзоны пользователя
5. некоторый контент выводится относительно той территории, к которой привязан
Конвертировать старые даты в Utc - ваще не вариант. Потратим уйму времени.
Ну допустим я добавил 2 новых типа данных в доктрину - datetime_utc, datetime_moscow. При занесении в базу/гидрации строки будет указана корректная дата. Перед форматированием и выводом даты я должен применить таймзону пользователя или города. В этом-то и напряг.
Дата форматируется в тысяче мест: как в шаблонах так и в контроллерах с репозиториями. Соответственно я должен пробежаться везде и поставить вызов какого-то своего хелпера, который применит нужную таймзону. Проблемы собственно 2:
1. вот так глобально везде это все поменять
2. добавление зависимости от хелпера
Как быть?
1. база проекта, все даты в ней за редким исключением - MySQL DATETIME, Europe/Moscow (server setting). Исключение - пара таблиц в MySQL DATETIME Utc
2. пользователи, у которых в настройках указана таймзона
3. Symfony2, Doctrine2.
Что нужно:
4. большинство контента выводится относительно таймзоны пользователя
5. некоторый контент выводится относительно той территории, к которой привязан
Конвертировать старые даты в Utc - ваще не вариант. Потратим уйму времени.
Ну допустим я добавил 2 новых типа данных в доктрину - datetime_utc, datetime_moscow. При занесении в базу/гидрации строки будет указана корректная дата. Перед форматированием и выводом даты я должен применить таймзону пользователя или города. В этом-то и напряг.
Дата форматируется в тысяче мест: как в шаблонах так и в контроллерах с репозиториями. Соответственно я должен пробежаться везде и поставить вызов какого-то своего хелпера, который применит нужную таймзону. Проблемы собственно 2:
1. вот так глобально везде это все поменять
2. добавление зависимости от хелпера
PHP:
<?php
// например есть
MeetRepository::getPastMeets($limit, $skip)
{
return $this->createQueryBuilder('m')->where('m.startAt >= :date')->setParameter('date', new DateTime())->getResult();
}
// так вот, теперь я должен принудительно проставить тип данных
MeetRepository::getPastMeets($limit, $skip)
{
return $this->createQueryBuilder('m')->where('m.startAt >= :date')->setParameter('date', new DateTime(), 'datetime_moscow')->getResult();
}
// но это ерунда, по сравнению с тем, что я должен указать таймзону, в которой нужно создавать DT
MeetRepository::getPastMeets($limit, $skip)
{
return $this->createQueryBuilder('m')->where('m.startAt >= :date')->setParameter('date', new DateTime('now', USER_TIMEZONE), 'datetime_moscow')->getResult();
}