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 :

Fonctions de dates


Sujet :

Langage PHP

  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Par défaut Fonctions de dates
    Bonjour,
    je n'arrive pas à manier les dates, comment faire quelque chose de simple s'il vous plait?
    => je souhaite enregistrer la date actuelle française en français dans ma base de données sous forme de timestamp.
    Ensuite je souhaite l'afficher : "Lundi 3 octobre 15:48:23"
    J'ai donc fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    date_default_timezone_set('UTC+1');//france
        $date=setlocale("D d F, H:i:s"); //en francais
        $date=date_timestamp_get($date);
    Mais ca ne marche pas...
    Je devrais enregister la date de France en timestamp puis l'afficher en francais... comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    date_default_timezone_set('UTC+1');//fuseau horaire ok
        $timestampVersBdd=setTimestamp();//timestamp ok
    [...]
        $date=setlocale("D d F, H:i:s", $timestampVersBdd);//???
    Donc je ne sais pas comment faire la 4eme ligne (avec //?)

  2. #2
    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
    Par défaut
    je souhaite enregistrer la date actuelle française en français dans ma base de données sous forme de timestamp.
    Une date dans une base de données mysql s'enregistre dans un type DATETIME au format "AAAA-MM-DD", pas en timestamp, ni au format local.

    Le formattage peut se faire directement avec mysql
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET lc_time_names = 'fr_FR';
    SELECT DATE_FORMAT(ta_colonne_date, "%W %d %M %Y")
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 104
    Par défaut
    Ok pour la locale fr_FR.
    Après sur le DATETIME c'est discutable. Personnellement je n'utilise que TIMESTAMP pour avoir accès à CURRENT_TIMESTAMP et les ON UPDATE...

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Par défaut
    Merci,
    donc je fais ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $id = ... ;
    SET lc_time_names = 'fr_FR';
    $db = mysql_connect('localhost', 'login', 'password');
    mysql_select_db('basededonnees',$db);
    $sql = 'SELECT DATE_FORMAT(date, "%W %d %M %Y") FROM table WHERE id='.$id.'';
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    while($data = mysql_fetch_assoc($req))
        {
        echo $data['date'];
        }
     
    mysql_close();
    et ca va me donner "Lundi 3 octobre 15:48:23" ?

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 104
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SET lc_time_names = 'fr_FR';
    c'est une commande à jouer dans mysql.

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 104
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    setlocale(LC_ALL, 'fr_FR');
    $id = ... ;
    $db = mysql_connect('localhost', 'login', 'password');
    mysql_select_db('basededonnees',$db);
    $sql = 'SELECT date FROM table WHERE id='.$id.'';
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    while($data = mysql_fetch_assoc($req))
    {
        echo date("l j F H:i:s", strtotime($data['date']));
    }
     
    mysql_close();

  7. #7
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Par défaut
    Merci,
    j'ai fait comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $result = $pdo->prepare('INSERT INTO commentaires (tp, auteur, contenu, crea, rang) VALUES(:tp, :auteur, :contenu, NOW(), :rang)'); 
    $reqmsg = $pdo->query('SELECT auteur, DATE_FORMAT(crea, "%d %m, %H:%i:%s") AS crea, contenu, rang, id FROM commentaires WHERE tp='.$_SESSION["tpmsg"].' ORDER BY crea ASC, rang DESC');
    M'ai à 16h25 ca maffiche 07h25 (soit GTM en format 12h)

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 104
    Par défaut
    En règle générale, on gère le formatage côté PHP, pas mysql. Si un jour tu veux rajouter un nouveau format (anglais par exemple), ta requête ne sera plus bonne parce que tu auras formatté en fr dans ta requête.

  9. #9
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Par défaut
    Ha et bien pas de probleme, mon site est excusivement reservé à 30 français qui vivent en france. Je ne mettrais jamais ca en anglais.
    Mais au lieu d'avoir "09 10, 07:32:05"
    j'aimerais avoir "Lun (ou Lundi) 9 octobre à 16:32:05"

    Merci

  10. #10
    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
    Par défaut
    Si un jour tu veux rajouter un nouveau format (anglais par exemple), ta requête ne sera plus bonne parce que tu auras formatté en fr dans ta requête.
    Ce n'est pas un bon argument : le format utilisé dans la requête peut être défini par PHP.

    à 16h25 ca maffiche 07h25
    Dans la bdd il est inscrit 07h25 ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Par défaut
    Exemple actuel :
    Affichage : "09 10, 07:32:05"
    Base de données : "2013-10-09 07:32:05"

    Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    setlocale(LC_ALL, 'fr_FR');
    $result = $pdo->prepare('INSERT INTO commentaires (tp, auteur, contenu, crea, rang) VALUES(:tp, :auteur, :contenu, NOW(), :rang)'); 
    $reqmsg = $pdo->query('SELECT auteur, DATE_FORMAT(crea, "%d %m, %H:%i:%s") AS crea, contenu, rang, id FROM commentaires WHERE tp='.$_SESSION["tpmsg"].' ORDER BY crea ASC, rang DESC');
    (Je souhaite absolument utiliser PDO car sinon mon code va se compliquer)


    Ce que je veux : "Lun (ou Lundi) 9 octobre à 16:32:05"

  12. #12
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 104
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Ce n'est pas un bon argument : le format utilisé dans la requête peut être défini par PHP.


    Dans la bdd il est inscrit 07h25 ?
    ça n'a aucun sens de faire joujou avec les formats de date en mysql alors que le traitement logique devrait être assuré par PHP. Tu perds du temps de traitement côté mysql et si tu as une requête lourde, ça peut jouer dans la balance !

  13. #13
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 104
    Par défaut
    Déjà essaie de comprendre pourquoi tu stockes des dates dans le future. Si le format était vraiment GMT tu aurais 14:32 dans la base contre 16:32 en php.

    execute ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT @@global.time_zone, @@session.time_zone;

  14. #14
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Par défaut
    J'écrits 16h, ca donne 07:00
    Selon GMT, on est en GMT+2 en France aujourdhui, donc 16-2=14h GMT
    7:00 = 17:00 et 17-14=3 donc GMT+3

    Moi je fais juste le code que je vous ai montré, il n'y a rien d'autre et sa fait ca...

  15. #15
    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
    Par défaut
    Tu perds du temps de traitement côté mysql
    Je ne pense pas que PHP soit plus rapide que Mysql sur ce sujet et de toute façon le temps de réalisation est négligeable dans les deux cas.
    Pour moi c'est juste une question de goût et de situation (et que setlocale n'a jamais voulu fonctionner sur PHP et que j'etais content de voir que ça marchait avec mysql)
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. Cherche fonction de date équivalente au strtotime en php
    Par keumlebarbare dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 02/10/2006, 10h21
  2. Fonction VB (Date, Left, InStr, etc) non reconnues
    Par BjornDunkerbeck dans le forum Access
    Réponses: 7
    Dernier message: 21/09/2006, 20h58
  3. Comment lancer une fonction à une date donnée
    Par ideal dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 05/02/2006, 13h52
  4. [CR]Aide sur les fonction de date et plage de date.
    Par Job dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 08/11/2005, 10h19
  5. fonction de date en Excel
    Par spopo dans le forum Excel
    Réponses: 11
    Dernier message: 11/08/2005, 14h36

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