Probléme - TimeHelper, CakeTime::format()

Par Majid Cameleon, il y a 10 ans


Bonjour et merci d'avance pour votre aide.

J'aimerais utiliser cette fonction, pour convertir mes dates.
TimeHelper, CakeTime::format()

Pratique et facile à utiliser, le soucis c'est qu'elle confond les mois(%m) et les jours(%d).

bootstrap.php

setlocale(LC_ALL, 'french');

Debug

Configure::read('Config')); //'language' => 'fr'

mode.php

debug(CakeTime::format('01/01/2015', '%A, %Y-%m-%d')); //'jeudi, 2015-01-01' //==> OK debug(CakeTime::format('01/12/2015', '%A, %Y-%m-%d')); //'lundi, 2015-01-12' //==> NOT OK, car la fonction estime que 12 est le jour. debug(CakeTime::format('13/01/2015', '%A, %Y-%m-%d')); //==> Renvoie une chaine vide //NOT OK, la fonction estime que 13 est le mois.

Merci à vous,

8 réponses

cyyynthia, il y a 10 ans

Si tu est sur CakePHP 3 tu peux utiliser la classe Time
Book

Majid Cameleon, il y a 10 ans

Non, je suis en CakePHP 2.x

Lartak, il y a 10 ans

Bonjour.

Si tu est sur CakePHP 3 tu peux utiliser la classe Time

Je ne pense pas qu'il soit sur la V3, étant donné que sur la V3 il n'y a plus d'appel à CakeTime.
@MajidCameleon, il ne faut pas que tu confondes le Helper et l'utilitaire.
Ensuite, tu dois donner sous le format SQL 2015-08-15 ou 2015-08-15 16:56:00 et non 15/08/2015.

Majid Cameleon, il y a 10 ans

Merci pour vos réponses,
@Lartak: il ne faut pas que tu confondes le Helper et l'utilitaire.
En quoi ai-je confondu helper et utilitaire ?

@Lartak: Ensuite, tu dois donner sous le format SQL 2015-08-15 ou 2015-08-15 16:56:00 et non 15/08/2015.
Je suis conscient, mais l'a n'est pas le probléme.

Que je passe d'un format de type (jj-mm-aaa) à (aaaa-mm-jj) et inversemment.
CakeTime, confond %m et %d et me revoie des dates érronées.
Pourtant j'ai bien configurér mon setlocale() et ma config CakePHP est bien en français.

Majid Cameleon, il y a 10 ans

Je comprend rien,

Ma vue, view()

<?= $this->Time->format($row['Pet']['birthday'], '%d/%m/%Y') ?> //Ici pas de probléme,

Mon model, beforeSave()

debug($this->data[$this->alias]['birthday']); debug(CakeTime::format($this->data[$this->alias]['birthday'], '%Y-%m-%d')); //Par contre dans mon beforeSave, il inverse %m et%d
Lartak, il y a 10 ans

En quoi ai-je confondu helper et utilitaire ?

Parce que tu nous donnais le lien du Helper, alors que dans ton code tu désignais l'utilitaire.

Que je passe d'un format de type (jj-mm-aaa) à (aaaa-mm-jj) et inversemment.
CakeTime, confond %m et %d et me revoie des dates érronées.

Comme je te l'ai déjà dit, la méthode format de l'utilitaire Time, attend une chaine de date au format SQL pour le convertir par la suite.
Donc si tu ne lui donnes pas la chaîne sous le format qu'elle attend, elle ne pourra pas la convertir correctement.
Ce qui fait que ton utilisation de la méthode dans le beforeSave est totalement inutile.
Et puis, si tu regardes dans la documentation concernant la méthode format, elle utilise la fonction strftime de PHP et cette fonction attend une chaîne sous le format mois/jour/années et non jour/mois/année, donc dans le cas ou la chaîne n'est pas sous le format SQL, elle utilise la fonction strftime.

Majid Cameleon, il y a 10 ans

Merci @Lartak
J y vois claire maintenant.

Lartak, il y a 10 ans

De rien, avec plaisir.