IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Class DateTime() et date UTC


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Points : 470
    Points
    470
    Par défaut Class DateTime() et date UTC
    Bonjour,

    Je prépare actuellement quelques class élémentaires pour un nouveau projet dans lequel j'essaye d'utiliser au maximum les class standard de PHP. Parmi elles se trouve la class DateTime() avec laquelle j'ai quelques soucis...

    Pour des questions de lisibilités et de limite entre 1901 et 2036, je pensais renoncer à la gestion des dates par timestamp (que je trouvais au demeurant fort pratique) et vais stocker mes dates au format SQL dans les tables (aaaa-mm-jj hh:ii:ss). Je compte stocker toutes les dates en UTC dans la table, alors que l'appli, elle, travaillera en fonction du fuseau horaire de l'utilisateur. Pour info, je vais travailler avec des dates iso-8601, c-a-d par exemple 2013-07-18T16:19:00-0400, ce format intégrant le décalage UTC.

    Le problème se situe au niveau de la conversion de la date gérée par DateTime en date SQL qui elle doit être au format UTC...
    Les seules solutions que je vois compte tenu des méthode dispo dans cette class, c'est de faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $x = new DateTime($madate);
    $x = $date->getTimeStamp();
    echo gmdate('Y-m-s H:i:s', $x);
    Ce qui est fort peu élégant et me remet cette contraintes idiotes entre 1901 et 2036, soit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $x = new DateTime($madate);
    $date->setTimezone(new \DateTimeZone('UTC'));
    echo $this->format('Y-m-s H:i:s');
    ce qui m'oblige à revenir ensuite sur ma timezone, mais là, vu la doc, je sais pas comment on fait (edit : j'ai trouvé, il faut choisir dans une liste de code)!!!

    Est-ce que cette class est vraiment mal foutu où ai-je raté quelque chose ?

    En vous remerciant !

    EDIT : d'après la lecture de l'article http://julien-pauli.developpez.com/tutoriels/php/dates/ il semble qu'il faille utiliser la 2eme méthode. Je laisse la question voir si il n'y a pas un moyen plus "court" pour faire ça.

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    pour éviter d'avoir à préciser éternellement le fuseau horaire à utiliser, tu as la fonction date_default_timezone_set() qui te permet de le fixer une bonne fois pour toute pour toutes les manipulations d'horodatage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    date_default_timezone_set('UTC');
    $utc = new \DateTime();

Discussions similaires

  1. Convertir un input datetime-local en date UTC via javascript
    Par tjoce05 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/05/2015, 07h13
  2. Manipulation de dates SQL avec la classe DateTime
    Par Ben Gates dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 3
    Dernier message: 08/03/2013, 17h04
  3. Conflit entre java.util.Date et class java.sql.Date
    Par vonitiana dans le forum Langage
    Réponses: 3
    Dernier message: 30/06/2006, 11h43
  4. DATETIME MySQL, Date et GregorianCalendar
    Par vallica dans le forum JDBC
    Réponses: 4
    Dernier message: 03/04/2006, 19h12
  5. Convertir un champ DATETIME en DATE avec SQLSERVER
    Par __fabrice dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/11/2005, 11h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo