Я сейчас пытаюсь сохранить свои даты в базе данных с часовым поясом UT C.
Чтобы получить часовой пояс пользователя, у меня есть функция JS, которая делает запрос AJAX на мой back-end как это:
import $ from 'jquery';
import jstz from 'jstz';
export default function setSessionTimezone(route)
{
var timezone = jstz.determine();
$.ajax({
type:'POST', async:true, cache:false, url:route, data:"timezone="+timezone.name(),
success:function(data) { if (data.reloadPage) location.reload(); }
});
}
Этот метод вызывается, только если часовой пояс еще не находится в сеансе Итак, пока у меня есть пользовательский часовой пояс в моем бэкэнде, это был первый шаг.
Я хочу сохранить его в базе данных. В этом сообщении я нашел кое-что интересное: Symfony buildForm конвертирует дату и время в локальную и обратно в ut c
Они рекомендуют использовать "model_timezone" и "view_timezone" для формы, я тоже:
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\TimeType;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class UtcTypeExtension extends AbstractTypeExtension
{
/**
* @var SessionInterface
*/
private $session;
public function __construct(SessionInterface $session)
{
$this->session = $session;
}
/**
* Return the class of the type being extended.
*/
public static function getExtendedTypes(): iterable
{
return [TimeType::class, DateType::class];
}
public function configureOptions(OptionsResolver $resolver)
{
parent::configureOptions($resolver);
$resolver->setDefaults([
'model_timezone' => 'UTC',
"view_timezone" => $this->session->get('tools_timezone')
]);
}
}
И уууу, это работает. Но только в формах.
Если я хочу отобразить даты с помощью Twig или из PHP, мне нужно получить часовой пояс из сеанса и изменить часовой пояс DateTime.
Поэтому я искал другой вариант. Я нашел это на Doctrine сайте , чтобы изменить часовой пояс напрямую с Doctrine.
Это звучит интересно, но я, вероятно, упускаю точку, потому что кажется, что работать, даже после того, как я добавил следующую конфигурацию:
doctrine:
dbal:
types:
datetime: SomeNamespace\DoctrineExtensions\DBAL\Types\UTCDateTimeType
Так что я хотел бы знать , возможно ли то, что я хочу сделать ? Или если я вынужден переопределить фильтр даты «Twig», чтобы использовать мой часовой пояс? И если я хочу отобразить дату с PHP, я также вынужден использовать часовой пояс из сеанса?