strftime et preg_match

ShinYoshi
Invité n'ayant pas de compte PHPfrance

20 mai 2012, 00:13

salut,
est-ce que quelqu'un a déjà rencontré ce problème :

je récupère deux dates dans ma base de donnée sous ce format:
DATE_FORMAT (article_creation_date, \'%Y-%m-%d-delimiter- à %Hh%i\') AS creationDate
DATE_FORMAT (article_modif_date, \'%Y-%m-%d-delimiter- à %Hh%i\') AS modifDate
les dates (elles sont identiques) que je récupère correspondent à :

Code : Tout sélectionner

2012-05-09-delimiter- à 11h24
je veux les convertir en date littérale française avec strftime :
$elements = explode('-delimiter-', $data['creationDate']);
if (setlocale(LC_TIME, 'fr_FR') == '') 
{
	setlocale(LC_TIME, 'FRA');  // windows problem correction
	 $day_format = '%#d';
} 
else 
{
	$day_format = '%e';
}
					
$frenchDate = strftime("%A $day_format %B %Y", strtotime($elements[0])); // exemple : mercredi 9 mai 2012
//$frenchDate = strval (utf8_encode (strftime("%A $day_format %B %Y", strtotime($elements[0])))); // ne change rien
$frenchDate .= $elements[1]; //  exemple : mercredi 9 mai 2012 à 11h24
$data['creationDate'] = $frenchDate;
$data['modifDate'] = 'mercredi 9 mai 2012 à 11h24'; // j'écrase en dur avec la vraie date
echo $data['creationDate'].'<br/>'; // affiche bien : mercredi 9 mai 2012 à 11h24
echo $data['modifDate'].'<br/>'; // affiche bien : mercredi 9 mai 2012 à 11h24
if ($data['creationDate'] == $data['modifDate']) echo 'EQUALS<br/>'; // pas d'echo, pourquoi???
if ($data['creationDate'] === $data['modifDate']) echo 'STRONG EQUALS<br/>'; // pas d'échon, pourquoi?
je récupère les données dans ma variable en testant avec un preg_match pour ne pas prendre n'importe quelles valeurs:
public function setDate($date)
{
     if (is_string($date) && preg_match('`[a-zéû]+ (1er|[0-9]{1,2}) [a-zéû]+ [0-9]{4} à [0-9]{2}h[0-9]{2}`', $date))
     $this->date= $date;
}
Seule la donnée que j'ai entré en dur passe le preg_match, l'autre ne passe pas, pourtant les echos m'affichent la même chose!

Quelqu'un a une idée?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 mai 2012, 00:04

Vérifies le code source quand tu fais tes echo ou fais des var_dump de tes variables. Il suffit d'un espace en plus au début, à la fin ou consécutif pour que tu ne le vois pas via le navigateur et pour que tes chaines soient différentes...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ShinYoshi
Invité n'ayant pas de compte PHPfrance

21 mai 2012, 22:56

merci, il fallait effectivement faire un var_dump à la place des echos. la function strftime renvoyait deux espaces après le nom du jour. j'ai donc bricolé la regex du preg_match.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

22 mai 2012, 11:09

C'est probablement parce que ta date était un 9 et que la fonction doit s'arranger pour que le numéro du jour soit toujours sur deux caractères. Tu aurais fait ton test le 11 tu n'aurais sans doute pas vu le problème avant le mois prochain ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...