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


Lartak
Réponse acceptée

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.

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

Non, je suis en CakePHP 2.x

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.

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.

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

Merci @Lartak
J y vois claire maintenant.

De rien, avec plaisir.