varios tiene rusia porque paises obtienen nombres misma mexico mapamundi mapa los las husos horas horarios horarias hora diferencias diferencia con como php symfony timezone

php - tiene - Symfony2: dónde configurar un huso horario definido por el usuario



paises con un dia de diferencia (1)

Sí, puedes usar un detector de eventos, conectando el evento kernel.request .

Aquí está el oyente de uno de mis proyectos:

<?php namespace Vendor/Bundle/AppBundle/Listener; use Symfony/Component/Security/Core/SecurityContextInterface; use Doctrine/DBAL/Connection; use JMS/DiExtraBundle/Annotation/Service; use JMS/DiExtraBundle/Annotation/Observe; use JMS/DiExtraBundle/Annotation/InjectParams; use JMS/DiExtraBundle/Annotation/Inject; /** * @Service */ class TimezoneListener { /** * @var /Symfony/Component/Security/Core/SecurityContextInterface */ private $securityContext; /** * @var /Doctrine/DBAL/Connection */ private $connection; /** * @InjectParams({ * "securityContext" = @Inject("security.context"), * "connection" = @Inject("database_connection") * }) * * @param /Symfony/Component/Security/Core/SecurityContextInterface $securityContext * @param /Doctrine/DBAL/Connection $connection */ public function __construct(SecurityContextInterface $securityContext, Connection $connection) { $this->securityContext = $securityContext; $this->connection = $connection; } /** * @Observe("kernel.request") */ public function onKernelRequest() { if (!$this->securityContext->isGranted(''ROLE_USER'')) { return; } $user = $this->securityContext->getToken()->getUser(); if (!$user->getTimezone()) { return; } date_default_timezone_set($user->getTimezone()); $this->connection->query("SET timezone TO ''{$user->getTimezone()}''"); } }

Uno de mis requisitos para mi proyecto actual es permitir que un usuario elija una zona horaria para su cuenta, y luego usar esta zona horaria para todas las funciones relacionadas con la fecha / hora en todo el sitio.

De la forma en que lo veo, tengo dos opciones:

  • Pasar un objeto DateTimeZone al constructor de DateTime para cada DateTime nuevo
  • Establezca la zona horaria predeterminada usando PHP date_default_timezone_set()

Parece que utilizar date_default_timezone_set es el camino a seguir, pero no estoy seguro exactamente dónde debo configurarlo. Debido a que el huso horario será diferente de usuario a usuario y DateTime se usa en todo el sitio, debo configurarlo en alguna parte para que afecte a todas las páginas.

Tal vez podría escribir un oyente de eventos que lo establece después de un inicio de sesión exitoso? Si tomo este enfoque, ¿permanecerá establecido en todas las páginas o solo se establecerá por página?

Me encantaría escuchar cómo otros se acercarían a esto.