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 :

problème avec fonction strtotime & preg_replace


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 83
    Points : 58
    Points
    58
    Par défaut problème avec fonction strtotime & preg_replace
    Hello,

    J'ai le code suivant

    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
     
    <?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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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>";
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 83
    Points : 58
    Points
    58
    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
    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,

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

    ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    echo DateTime::createFromFormat('m/d/Y H:i', '01/11/2012 00:00')->format('U');

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Salut,
    peut être avantageusement remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. Problème avec fonctions et string/char
    Par vdumont dans le forum C++
    Réponses: 6
    Dernier message: 08/04/2006, 17h54
  2. Problème avec fonction
    Par Goundy dans le forum C
    Réponses: 24
    Dernier message: 01/10/2005, 21h17
  3. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 12h00
  4. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 09h48
  5. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 22h52

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