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

PHP & Base de données Discussion :

Problème de fuseau horaire


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 27
    Points : 19
    Points
    19
    Par défaut Problème de fuseau horaire
    Salut,

    J'ai mis en place un simple système permettant de poster un message où la date du post est précisée.
    Lors de l'écriture dans la base de données, j'ai mis ces lignes de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $req = mysql_query("INSERT INTO table".
    	"(id, pseudo, message, datatime) ".
    	"VALUES ".
    	"('','$pseudo','$message',LOCALTIMESTAMP())
    Le souci, c'est que mon site est hébergé à l'étranger et je n'ai pas trouvé le moyen de changer le fuseau horaire (la différence est de 6h).
    Du coup, j'ai mis ça juste avant l'écriture mais ça ne fait absolument rien (Pourtant, j'ai fait un test php avec ça + un echo de la date actuelle et ça marchait).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date_default_timezone_set('Europe/Paris');
    Enfin, lors de la lecture des données des messages, j'ai mis ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $req = mysql_query('SELECT * FROM table ORDER BY id DESC LIMIT 0, 10'); while ($dnn = mysql_fetch_array($req))
    	{
    	sscanf($dnn['datatime'], "%4s-%2s-%2s %2s:%2s", $annee, $mois, $jour, $heure, $minute);
    Au début, j'avais mis juste après ce code "$heure=$heure+6;" mais si on poste un message vers minuit, on risque d'avoir de mauvaises surprises du genre "25h".
    Du coup, je ne sais pas comment procéder...

  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 : 47
    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,

    règle d'or : toujours horodater en temps GMT (ou ZULU ou UTC si tu préfères).
    Raison simple, où que soient les bases, tu pourras toujours recalculer facilement l'horodatage en temps local sans te préoccuper du fuseau horaire du serveur.
    Sans compter que si tes clients se connectent de différents fuseaux horaires et que tu horodates en temps local serveur, certains verront leur post à 23h alors qu'il est midi par exemple chez eux...

    Pour les manipulations des horodatages : DateTime() et DateTimeZone()

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Bonsoir,

    J'ai essayé quelques commandes mais je n'ai pas réussi à obtenir un résultat satisfaisant. En réalité, j'ai même l'impression que le fuseau horaire de la db est indépendant de celui généré par le php. Je me trompe sûrement, mais j'avoue être un peu perdu.

    Sinon, j'avais pensé à créé la date et l'heure via le php et ensuite sauvegarder le tout dans un champs varchar de la base de données mais je pense que ce n'est pas très propre et qu'il vaut mieux utiliser le champs datetime.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux tout a fait construire une date en PHP et la mettre dans un champs datetime.
    La requête que tu envoies via PHP est une chaine de caractère, y compris la date.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    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 : 47
    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,

    quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $utc_tmz      = new DateTimeZone('utc');
    $now          = new DateTime();
    $current_time = $now->format(DATE_W3C);
    $now->setTimezone($utc_tmz);
     
    echo
    <<<HTML
    <pre>
    Current timezone = {$now->getTimezone()->getName()}
    Current time     = {$current_time}
    ZULU time        = {$now->format(DATE_W3C)}
    HTML;

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Ok, Merci !

    Cela dit, j'ai toujours un souci. Le décalage est maintenant d'une heure.
    Logique puisque la France est réglé au fuseau horaire UTC+1.
    Mais alors, comment faire pour que l'heure soit valide dans tous les pays ?

  7. #7
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    Le + ou - 1 vient du fait que tu as l'heure d'été ou d'hiver, ce que tous les pays ne suivent pas en plus si tu veux être formel tu auras plusieurs fuseaux sur les grands pays...
    donc la locale ne suffit pas toujours surtout si tu veux faire une truc qui marche partout
    faut bien lire comment marche l'heure gmt et ensuite la doc sur les réglages à faire avec les modifications de locale en php
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

Discussions similaires

  1. emctl/timezone: problème de fuseau horaire.
    Par rvfranck dans le forum Administration
    Réponses: 2
    Dernier message: 29/03/2008, 03h20
  2. fuseau horaire en vb6
    Par john stedd dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 27/06/2006, 17h02
  3. Date - fuseau horaire
    Par sparton dans le forum Collection et Stream
    Réponses: 16
    Dernier message: 11/01/2006, 15h46

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