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 :

amener une variable $date au TimeZone UTC


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Par défaut amener une variable $date au TimeZone UTC
    Bonjour a tous

    je travaille depuis un certain temps a résoudre ce sujet ,

    j'aimerais convertir une $variable donnée $date_depart en date UTC

    et aussi en fonction d'une variable $Timezone.

    la variable $Timezone peut contenir 5 differents Timezone

    voici ou j'en suis rendu

    et merci pour votre aide


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    <?php
    // la variable postdate_depart qui contient la date poster par l'utilisateur
     
     
    $postdate_depart = $annee_depart . "-" . $mois_depart . "-"  . $jour_depart . "" . $heure_dep . ":" . $minute_depart;
     
    //$date_depart = new DateTime("2010-11-14 15:30");
     
    $TimeZoneAV = 'America/Edmonton'; //cette variable provient d'une requete mysql
     
    $tzD = new DateTimeZone($TimeZoneAV); // pour ajuster le timezone		
     
    $date_depart->setTimezone($tzD); //pour ajuster la date depart au $TimezoneAV
     
     
    $tzU = new DateTimeZone('UTC');  // timezone UTC
     
    $date_depart->setTimezone($tzU); // je veux ajuster la date depart au timezonw UTC mais a partir du timezone $TimeZoneAV
     
     
     
    echo'<p> L\'heure de depart UTC est: ' .$date_depart->format('Y-m-d H:i').'</p>'; // ca fonctionne pas
     
    ?>

  2. #2
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    On ne sait pas d'où vient $date_depart, comment il a été créé/instancié, c'est pourtant l'élément (un Objet DateTime) le plus important.


    Un exemple en partant de ta date, qui elle correspond à un timeZone (America/Edmonton) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    $timeZone = 'America/Edmonton';
    $date = new DateTime('2010-11-14 15:30', new DateTimeZone($timeZone));
    echo $date->format('d/m/Y H:i P e').'<br />';
     
    $timeZone = 'UTC';
    $date->setTimezone(new DateTimeZone($timeZone));
    echo $date->format('d/m/Y H:i P e').'<br />';
     
    $timeZone = 'Europe/Paris';
    $date->setTimezone(new DateTimeZone($timeZone));
    echo $date->format('d/m/Y H:i P e').'<br />';
     
    $timeZone = 'Indian/Reunion';
    $date->setTimezone(new DateTimeZone($timeZone));
    echo $date->format('d/m/Y H:i P e').'<br />';
     
    $timeZone = 'America/Edmonton';
    $date->setTimezone(new DateTimeZone($timeZone));
    echo $date->format('d/m/Y H:i P e').'<br />';
    Affichera :
    14/11/2010 15:30 -07:00 America/Edmonton
    14/11/2010 22:30 +00:00 UTC
    14/11/2010 23:30 +01:00 Europe/Paris
    15/11/2010 02:30 +04:00 Indian/Reunion
    14/11/2010 15:30 -07:00 America/Edmonton

    Donc ici on a qu'un seul Objet DateTime, et à chaque fois on change de fuseau horaire.
    Il faut qu'au départ le timeZone corresponde bien à la date/heure, sinon tout sera faussé.

  3. #3
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    Cependant il faudrait ajouter que si le time zone n'est pas précisé lors de l'instanciation de l'objet DateTime celui définit dans le php.ini est utilisé.

  4. #4
    Membre éclairé Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Par défaut
    merci RunCodePhp,
    je ne connaissais pas encore:

    $date->setTimezone(new DateTimeZone($timeZone));
    qui est beaucoup plus pratique et en une seule ligne en +

    mais j<ai encore de la difficulté a faire accepter ma variable
    $date_depart

    On ne sait pas d'où vient $date_depart, comment il a été créé/instancié, c'est pourtant l'élément (un Objet DateTime) le plus important.
    Je suis tout a fait d'accord!

    $date_depart provient de 5 champs SELECT dans un formulaire que l'utilisateur a entrer pour choisir le moment du depart

    pourquoi 5 champs select ?

    Je n'ai pas beaucoup le choix, puisque il doit choisir le jour du depart
    le mois du depart, l'heure du depart ainsi que le champ minute

    Select jour contient: 1 a 31 (donne la variable $jour_depart)
    select mois contient: 1 a12 (donne la variable $mois_depart)
    select annee: 2010-2011 (donne la variable $annee_depart)
    heure contient: 1 a 23 et la derniere contient 0 (donne la variable $heure_dep)
    minute contient: 15 30 45 00 (donne la variable $minute_depart


    ce que je réunis comme ceci

    $date_depart = $annee_depart . "-" . $mois_depart . "-" . $jour_depart . "" . $heure_dep . ":" . $minute_depart;

    cependant , SetTimezone ne reconnait pas cette variable $ date_depart

  5. #5
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Je t'ai mis 5 simples exemples de code, et il faut juste adapter un peu.

    Aussi, réfère toi à la Doc Php.
    La classe DateTime
    La classe DateTimeZone


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    // la variable postdate_depart qui contient la date poster par l'utilisateur
    //$postdate_depart = $annee_depart . "-" . $mois_depart . "-"  . $jour_depart . "" . $heure_dep . ":" . $minute_depart;
    $postdate_depart = '2010-11-14 15:30:45';
     
    $TimeZoneAV = 'America/Edmonton'; //cette variable provient d'une requete mysql
    $date_depart = new DateTime($postdate_depart, new DateTimeZone($TimeZoneAV));
     
    $tzU = new DateTimeZone('UTC');  // timezone UTC
    $date_depart->setTimezone($tzU); // je veux ajuster la date depart au timezonw UTC mais a partir du timezone $TimeZoneAV
     
    echo '<p> L\'heure de depart UTC est: ' .$date_depart->format('Y-m-d H:i s').'</p>';
     
    ?>
    minute contient: 15 30 45 00 (donne la variable $minute_depart
    L'espace ainsi que les 2 derniers 0 n'est pas correcte, ça n'est pas conforme au format standard d'un DateTime de MySQL par exemple, et pour Php aussi, ce qui provoque une erreur quand on instancie un Objet DateTime.
    Le format standard est le suivant : 2010-11-14 15:30:45
    Va te falloir corriger ça.


    D'ailleurs, je ne comprends pas pourquoi tu as créer des champs pour séparer la date de départ.
    Mettre cette date dans un seul champ DATETIME est pourtant bien plus simple, car MySQL offre quasi toutes les fonctions sur les date pour pouvoir obtenir ce qu'on veut (uniquement le jour, le mois, l'année, etc ...) si le cas se présente.
    La doc MySQL pour les divers fonctions de date
    Y compris Php aussi, ce qui offre tout l'embarras du choix.
    Tu te complique la vie à mon sens.

  6. #6
    Membre éclairé Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Par défaut
    Merci Runcode Php pour tes exemples
    c'est maintenant tout adapté !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. declarer une variable date
    Par da991319 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/11/2007, 18h57
  2. [T-SQL]Envoyer en paramètre de proc stock Sybase une variable date shell
    Par Doctor Z dans le forum Adaptive Server Enterprise
    Réponses: 5
    Dernier message: 30/10/2007, 16h18
  3. initialisation d'une variable DATE
    Par olivll dans le forum Access
    Réponses: 4
    Dernier message: 25/07/2006, 11h57
  4. Réponses: 6
    Dernier message: 14/02/2005, 11h53
  5. [Crystal Report] Comment amener une variable
    Par grom91 dans le forum SAP Crystal Reports
    Réponses: 9
    Dernier message: 11/02/2005, 12h07

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