strftime et preg_match

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : strftime et preg_match

Re: strftime et preg_match

par Ryle » 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 ;)

Re: strftime et preg_match

par ShinYoshi » 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.

Re: strftime et preg_match

par Ryle » 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...

strftime et preg_match

par ShinYoshi » 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?