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 :

analyse du format d'une date avec strtotime, ou transformer une date j/m/Y en Y-m-d


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    513
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 513
    Points : 127
    Points
    127
    Par défaut analyse du format d'une date avec strtotime, ou transformer une date j/m/Y en Y-m-d
    Bonjour à toutes et tous

    je voulais transformer des dates françaises (28/08/1954) en date au format mysql 1954-08-01
    voici tous les tests :
    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
    echo "date('d/m/Y',0) = ".$premier_fr=date("d/m/Y",0);echo'<br/>';echo'<br/>';
    echo "86400 = 1 jour en seconde ";echo'<br/>';
    echo "date('d/m/Y',86400) = ".$premier_fr=date("d/m/Y",86400);echo " un jour après le 1janvier 1970 date de référence de strtotime";echo'<br/>';
    echo "date('m/d/Y',86400) = ".$premier_fr=date("m/d/Y",86400);echo " un jour après le 1janvier 1970 date de référence de strtotime";echo'<br/>';
    echo "date('Y-m-d',86400) = ".$premier_fr=date("Y-m-d",86400);echo " un jour après le 1janvier 1970 date de référence de strtotime";echo'<br/>';
    echo "date('Y-d-m',86400) = ".$premier_fr=date("Y-d-m",86400);echo " un jour après le 1janvier 1970 date de référence de strtotime";echo'<br/>';
    echo "type de ".$premier_fr." ".gettype($premier_fr);echo'<br/>';
    echo "type de date('d/m/Y',86400) ".gettype(date("d/m/Y",86400));echo'<br/>';
    echo "strtotime(date('d/m/Y',86400)) = ".$date_strtotime_premier_fr=strtotime($premier_fr);echo" = au 31ème jour après ler janvier 1970 donc le 1er Février 1970";echo'<br/>';
    echo "strtotime('02/01/1970') fr: ".$date_strtotime_premier_fr=strtotime("02/01/1970")." = au 31ème jour après ler janvier 1970 donc le 1er Février 1970";echo'<br/>';
    echo "strtotime('01/02/1970') fr: ".$date_strtotime_premier_fr=strtotime("01/02/1970")." = au 1er jour après ler janvier 1970 donc le 2 janvier 1970";echo'<br/>';echo" le strtotime considère les dates avec des '/' comme date au format : mois/ jour/ année"; echo'<br/>';echo'<br/>';
     
    echo "2 janvier 1970 US :date('Y-m-d',86400) ".$premier_US=date("Y-m-d",86400);echo'<br/>';
    echo "date strtotime date('Y-m-d',86400) US Ymd: ".$date_strtotime_premier_US=strtotime($premier_US)." = au 1er jour après ler janvier 1970";echo'<br/>';
    echo "date strtotime date('1970-01-02') US Ymd: ".$date_strtotime_premier_US=strtotime("1970-01-02")." = au 1er jour après ler janvier 1970";echo'<br/>';
    echo "2 janvier 1970 US2 date('Y-d-m',86400): ".$premier_US2=date("Y-d-m",86400);echo'<br/>';
    echo "date strtotime date('Y-d-m',86400) US2 Ydm: ".$date_strtotime_premier_US2=strtotime($premier_US2)." = au 31ème jour après ler janvier 1970";echo'<br/>';
    echo "date strtotime date('1970-02-01') US Ymd: ".$date_strtotime_premier_US2=strtotime("1970-02-01")." = au 31ème jour après ler janvier 1970";echo'<br/>';
    echo "le strtotime considère  les dates avec des tirets '-' comme dates au format Année-mois-jour";
    echo'<br/>';

    date('d/m/Y',0) écrit une date dans les bons formats indiqués.
    mais apparemment strtotime analyse les dates avec des '/' comme date au format : mois/ jour/ année
    et les dates avec des tirets '-' comme dates au format Année-mois-jour.

    donc quel moyen de transformer directement une date j/m/Y en Y-m-d

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 228
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 228
    Points : 8 487
    Points
    8 487
    Billets dans le blog
    17
    Par défaut
    dd/mm/yyyy est en effet compris comme mm/dd/yyyy par strtotime() (format américain).

    Pour lever l'ambiguïté tu dois transformer en dd-mm-yyyy :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $d = '15/04/2024';
    $d = str_replace('/', '-', $d);
    echo date('Y-m-d', strtotime($d)); // 2024-04-15
    Sinon pour éviter les manipulations préalables il y a DateTime::createFromFormat() => https://www.php.net/manual/fr/dateti...fromformat.php

  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 896
    Points : 6 655
    Points
    6 655
    Par défaut
    Oui, j'irais plutôt dans ce sens là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $dt = DateTime::createFromFormat('d/m/Y', '28/08/1954');
    echo $dt->format('Y-m-d');
    Quant aux résultats renvoyés par strtotime, cette fonction ne s'attend qu'à un format anglais, donc quand on lui fournit autre chose, il tente de s'adapter et le résultat n'est pas forcément celui auquel on s'attend.

    Avec DateTime pas de mauvaises surprises: on peut explicitement donner le format d'entrée et celui de sortie.

  4. #4
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    513
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 513
    Points : 127
    Points
    127
    Par défaut
    Merci

    c'est plus clair ainsi

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

Discussions similaires

  1. Modifier le format d'une date avec SELECT INTO OUTFILE
    Par Merguezman dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/06/2017, 11h58
  2. [RegExp] Format d'une date avec la commande Pattern sur un Input
    Par CrasherSEP dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 24/05/2016, 09h15
  3. Verifier le format d'une date d'une page php avec javascript
    Par rimbaut dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 31/05/2010, 22h23
  4. format d'une date avec mysqladmin
    Par phpines dans le forum MySQL
    Réponses: 2
    Dernier message: 16/03/2009, 10h00
  5. Réponses: 6
    Dernier message: 14/02/2005, 11h53

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