Précédent   Forum du club des développeurs et IT Pro > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 23/11/2012, 18h20   #1
rin01
Futur Membre du Club
 
Inscription : juin 2006
Messages : 70
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2006
Messages : 70
Points : 19
Points : 19
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
Citation:
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
rin01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2012, 20h50   #2
sabotage
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 16 469
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 16 469
Points : 21 274
Points : 21 274
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>";
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2012, 20h59   #3
rin01
Futur Membre du Club
 
Inscription : juin 2006
Messages : 70
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2006
Messages : 70
Points : 19
Points : 19
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!
rin01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2012, 22h01   #4
rawsrc
Modérateur
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 2 586
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 36
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 2 586
Points : 6 035
Points : 6 035
Envoyer un message via Skype™ à rawsrc
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...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/11/2012, 09h39   #5
christele_r
Membre Expert
 
Avatar de christele_r
 
Femme Christele Rubneau
Inscription : novembre 2009
Messages : 1 052
Détails du profil
Informations personnelles :
Nom : Femme Christele Rubneau
Âge : 40
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2009
Messages : 1 052
Points : 1 428
Points : 1 428
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
christele_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 06h28.


 
 
 
 
Partenaires

Hébergement Web