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 :

modifier format de date


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut modifier format de date
    Bonjour,

    Question qui doit revenir souvent, mais malgré les différents solutions trouvées sur notre ami google, je n'arrive pas à convertir ma date.

    je reçois une date dans le format 'dd/mm/yy HH24:MI' et j'aimerais la convertir au format 'yyyy-mm-dd HH:MM:SS'.

    Une solution ?

    Merci.

  2. #2
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 387
    Points
    9 387
    Par défaut
    Beh la fonction date() est faite pour cela.

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 236
    Points
    20 236
    Par défaut
    En php 5.3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date = DateTime::createFromFormat('d/m/Y h:i',$madate);
    echo $date->format('Y-m-d H:i:s');

  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
    PLutot strtotime() puis date()

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    je ne comprends pas, ça ne fonctionne pas, ça plante même

    mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $date = DateTime::createFromFormat('d/m/Y h:i',$response['transaction']['date']);
    $dp->datePaiement = $date->format('Y-m-d H:i:s');
    J'obtiens l'erreur : Fatal error: Call to a member function format() on a non-object

    Où puis-je me tromper ?

    Merci.

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    en fait, je cherche à formater une date de la façon suivante :
    je récupère une date avec son propre format, et donc je veux la transformer dans le format souhaité.

    la fonction date::format() permet de formater comme on veut une date du type '2000-01-01'...
    quand je fais des test avec une année sur 2, il ne sait pas quelle zone est l'année ...
    donc ça ne fonctionne pas ...

    Une solution existe pour cela ?

  7. #7
    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
    quand je fais des test avec une année sur 2, il ne sait pas quelle zone est l'année ...
    Pour PHP :
    70->100 c'est 1970->2000
    00->69 c'est 2000->2069

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    ok mais mon problème persiste :
    ma date a le format dd/mm/yy

    je transforme le '/' en '-' puis le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $date = new DateTime('14-01-11 12:20');
    echo $date->format('Y-m-d H:i:s');
    Résultat : 2014-01-11 12:20:00

    alors que souhaite obtenir : 14-01-2011 12:20:00.

    C'est pour ça que je cherche une solution à laquelle on donne le format d'entrée.

    Merci.

  9. #9
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 387
    Points
    9 387
    Par défaut
    Le soucis doit venir du fait qu'il n'interprète pas la date correctement. (UE/US)
    As-tu essayé en passant par strtotime() puis date() ?

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est pour ça que je cherche une solution à laquelle on donne le format d'entrée.
    Ca n'existe pas nativement, c'est a toi de transformer ta date dans un format reconnu par php (a base de explode).

  11. #11
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    oui j'ai essayé, le problème reste identique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date =  strtotime("14-01-11 12:20");
    echo date('Y-m-d H:i:s', $date);
    résultat affiché : 2014-01-11 12:20:00

    alors que mon année est 2011 ...

  12. #12
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 387
    Points
    9 387
    Par défaut
    Et avec ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date =  strtotime(str_replace('-','/',"14-01-11 12:20"));
    echo date('Y-m-d H:i:s', $date);
    Car - est pour les dates US il me semble, donc cela porte à confusion.

  13. #13
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    non ça ne fonctionne pas, il n'accepte pas le '/'.

    le problème, c'est comment lui dire que l'année et 11 et pas 14 ??

  14. #14
    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
    oui j'ai essayé, le problème reste identique :
    Ton format de date n'est pas bon, tu dois avoir Y-m-d
    exemple
    http://php.developpez.com/faq/langag...tes#date_fr2en

  15. #15
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    je ne maîtrise pas le format de la date en entrée, soit dd/mm/yy ...
    c'est une valeur que je reçois et que je souhaite enregistrer dans MySql au formaat yyyy-mm-jj ...

  16. #16
    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
    je ne maîtrise pas le format de la date en entrée, soit dd/mm/yy ...
    C'est pour ca qu'on arrête pas de te dire de la convertir.

    Avec mysql tu as STR_TO_DATE() pour le faire directement.

  17. #17
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    mais j'essaie de la convertir.
    je veux l'enregistrer au format '2011-04-11 12:20:00' ... car pour le tri, c'est plus facile...
    je ne veux pas enregistrer le format d'entrée dans la base de donnée ...

  18. #18
    Membre éclairé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Points : 735
    Points
    735
    Par défaut
    Soyons bourrin si tu es sûr qu'à chaque fois la date reçue sera du même format :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $receivedDate = "31/12/11 11:32"; // la date reçue
    preg_match('#(\d{2})/(\d{2})/(\d{2}) (\d{2}):(\d{2})#', $receivedDate, $match); // on cherche les éléments via regexp (that's bad !)
    list($receivedDate, $day, $month, $year, $hour, $minute) = $match; // on assigne les résultats trouvés dans le regexp aux variables
    $date =  strtotime($year."-".$month."-".$day." ".$hour.":".$minute); // on le transforme en "temps"
    echo date('Y-m-d H:i:s', $date); // on l'affiche avec le format voulu.
    Et oui, je sais, c'est crade Et optimisable (genre ligne 4 et 5 fusionnées)
    Mais bon, ça a l'avantage de forcer à avoir le même format et à donner le résultat escompté.

    La preuve

  19. #19
    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
    C'est plus simple d'utiliser STR_TO_DATE()

  20. #20
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    tu peux me fournir un exmple avec str_to_date car avec les recherches que j'ai faites, je ne vois pas comment ça pourrait m'aider...

Discussions similaires

  1. Format de date : modifier par le .parse
    Par care dans le forum Langage
    Réponses: 4
    Dernier message: 06/01/2010, 14h32
  2. [XE] Comment modifier l'affichage du format de date ?
    Par Lung dans le forum Administration
    Réponses: 9
    Dernier message: 09/09/2009, 14h10
  3. Modifier un format de date
    Par toast.lou dans le forum Développement
    Réponses: 3
    Dernier message: 23/07/2009, 11h50
  4. [AC-2002] modifier le format de date dans une requête
    Par tom@tom dans le forum VBA Access
    Réponses: 1
    Dernier message: 24/06/2009, 09h36
  5. Formater une date via un timestamp UNIX et un modèle modifiable
    Par Aldéhir dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 7
    Dernier message: 11/09/2007, 16h43

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