Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Nouveau Membre du Club
    Profil pro
    Inscrit en
    juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : juin 2006
    Messages : 78
    Points : 26
    Points
    26

    Par défaut problème avec fonction strtotime & preg_replace

    Hello,

    J'ai le code suivant

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <?php
    $value="01/11/2012";
    $test=strtotime(preg_replace('/([\d]{2})-([\d]{2})-([\d]{4})/','$3-$2-$1',$value));
    echo "$value<br>$test<br><br>";
     
    $value="14/11/2012";
    $test=strtotime(preg_replace('/([\d]{2})-([\d]{2})-([\d]{4})/','$3-$2-$1',$value));
    echo "$value<br>$test<br><br>";
     
    $value="12/11/2012";
    $test=strtotime(preg_replace('/([\d]{2})-([\d]{2})-([\d]{4})/','$3-$2-$1',$value));
    echo "$value<br>$test<br><br>";
     
    ?>
    le résultat est le suivant
    01/11/2012
    1326236400

    14/11/2012


    12/11/2012
    1355180400
    Pourquoi la fonction
    Code :
    strtotime(preg_replace('/([\d]{2})-([\d]{2})-([\d]{4})/','$3-$2-$1',$value));
    ne renvoie rien pour toutes les dates >= 13/11 ?

    Merci de votre aide

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro Vincent
    Inscrit en
    juillet 2005
    Messages
    21 431
    Détails du profil
    Informations personnelles :
    Nom : Homme Vincent

    Informations forums :
    Inscription : juillet 2005
    Messages : 21 431
    Points : 31 229
    Points
    31 229

    Par défaut

    Ton expression régulière n'est pas bonne : elle a des - et non des /

    01/11/2012 est une date valide mm/dd/yyyy donc tu obtiens quand meme quelque chose, qui n'est pas bon, mais quelque chose.
    mais pas 14/11/2012.

    Par contre ton premier debug aurait du etre de controler ce que retournait ton expression reguliere, tu aurais tout de suite trouvé le problème.

    Code :
    1
    2
    3
    $value="14/11/2012";
    $test=strtotime(preg_replace('#([\d]{2})/([\d]{2})/([\d]{4})#','$3-$2-$1',$value));
    echo "$value<br>$test<br><br>";

  3. #3
    Nouveau Membre du Club
    Profil pro
    Inscrit en
    juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : juin 2006
    Messages : 78
    Points : 26
    Points
    26

    Par défaut

    En effet j'ai décortiqué le retour du preg_replace et je me suis rendu compte du soucis.
    En remplaçant les par ça fonctionne bien!

    Merci!

  4. #4
    Modérateur
    Avatar de rawsrc
    Homme Profil pro Martin
    Dev indep
    Inscrit en
    mars 2004
    Messages
    3 669
    Détails du profil
    Informations personnelles :
    Nom : Homme Martin
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 3 669
    Points : 9 031
    Points
    9 031

    Par défaut

    Salut,

    s'embêter avec des regex pour des pauvres dates, c'est vraiment se compliquer la vie pour rien...

    ceci :
    Code :
    1
    2
    3
    $value="01/11/2012";
    $test=strtotime(preg_replace('/([\d]{2})-([\d]{2})-([\d]{4})/','$3-$2-$1',$value));
    echo "$value<br>$test<br><br>";
    peut être avantageusement remplacé par :
    Code :
    echo DateTime::createFromFormat('m/d/Y H:i', '01/11/2012 00:00')->format('U');
    # Dans la Création, tout est permis mais tout n'est pas utile...

  5. #5
    Expert Confirmé
    Avatar de christele_r
    Femme Profil pro Christele Rubneau
    Responsable de service informatique
    Inscrit en
    novembre 2009
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Nom : Femme Christele Rubneau
    Âge : 66
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : novembre 2009
    Messages : 1 365
    Points : 2 576
    Points
    2 576
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par rawsrc Voir le message
    Salut,
    peut être avantageusement remplacé par :
    Code :
    echo DateTime::createFromFormat('m/d/Y H:i', '01/11/2012 00:00')->format('U');
    Oh que OUI ++ avec toi, en plus trés souvent il y a encore plus fort selon ce qui est attendu avec les constantes de dates qui peuvent être utilisées, ce qui fait par exemplle que DATE_RSS va remplacer le format "D, d M Y H:i:s".

    http://www.php.net/manual/fr/class.d...onstants.types

    Bien vue ta remarque
    Christele

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •