Différents types de fuseau horaire sur l'objet DateTime

J'utilise Doctrine2 sur Postgres. Dans une table, j'ai deux types de dates différents: birthdate:date et created_at:datetimetz. Les deux deviennent un objet DateTime mais avec timezone_type différent. Voici les listes:

created_at datetimetz:

DateTime Object
(
    [date] => 2013-04-18 11:54:34
    [timezone_type] => 1
    [timezone] => +02:00
)

birthdate date:

DateTime Object
(
    [date] => 1970-01-01 00:00:00
    [timezone_type] => 3
    [timezone] => Europe/Berlin
)

J'ai besoin de formater mes objets de la même manière. Les deux devraient avoir timezone_type=3.

Comment puis-je y parvenir?

21
demandé sur vascowhite 2013-07-17 12:33:01

1 réponses

Les fuseaux horaires peuvent être l'un des trois types différents dans les objets DateTime:

  • Type 1; un décalage UTC, tel que dans new DateTime("17 July 2013 -0300");
  • Type 2; une abréviation de fuseau horaire, comme dans new DateTime("17 July 2013 GMT");
  • Type 3: un identifiant de fuseau horaire, tel que dans new DateTime( "17 July 2013", new DateTimeZone("Europe/London"));

Seuls les objets DateTime avec des fuseaux horaires de type 3 attachés permettront L'heure d'été correctement.

Afin d'avoir toujours le type 3, vous devrez stocker le fuseau horaire dans votre base de données en tant qu'identifiants acceptés à partir de cette liste et appliquez-le à votre objet DateTime lors de l'instanciation.

52
répondu vascowhite 2014-11-12 11:26:12