Format Date

J’ai mon champ datecreation qui est de type integer.

Avec la vue “view” j’arrive à afficher les données en format date en faisant :

array(

‘name’=>‘datecreation’,

‘type’=>‘date’,

),

Mais c’est afficher sous le format : 2004/04/22 donc en anglais comment faire pour l’affichier sous un format français ?

Salut à toi Gueye !

J’ai eu exactement le même problème il y a peu, voilà comment le régler :

Dans ta vue (CGridView j’imagine) insère le code suivant (adapter à tes besoin) :


array (

			'name' => 'dateCreation',

			'value' => array($model, 'formatDate') // appel de la fonction formatDate($data, $row) de la classe Consultation

		),

Dans le model correspondant, tu crées une fonction qui a le nom du deuxième paramètre de l’array :




        /**

	 * Appelée dans protected/view/consultation/index.php

	 * Retourne la valeur formatée de la date de création

	 * @param Consultation $data donée courrante

	 * @param int $row index de la donnée courrante

	 * @return date Date à afficher

	 */

	public static function formatDate ($data, $row) {

		return date("d/m/Y", strtotime($data->dateCreation));

	}



En espérant être clair ^^"

Missing argument 2 for Objet::formatDate()

C:\xamppversion\XampWin32_182\htdocs\Projet\PROJTEST\protected\models\Objet.php(208)

196 }

197 else

198 return false;

199 }

200

201 /**

202 * Appelée dans protected/view/consultation/index.php

203 * Retourne la valeur formatée de la date de création

204 * @param Consultation $data donée courrante

205 * @param int $row index de la donnée courrante

206 * @return date Date à afficher

207 */

208 public static function formatDate ($data, $row) {

209 return date("d/m/Y", strtotime($data->dateCreation));

210 }

211 }

Il m’affiche cette erreur

Donnes moi le code de ta vue et de ton model s’il te plaît =)

j’ai modifié la fonction dans l’objet en mettant sur le deuxième argument $row=null car suivant l’erreur c’est un problème de passage de paramètre

mon modél

public static function formatDate ($data,$row=null) {


        return date("d/m/Y", strtotime($data->datecreation));


} 


public static function formatDate ($data,$row=null) {


        return date("d/m/Y", strtotime($data->datemiseajour));


} 

ma vue :

<?php

/* @var $this MenuController */

/* @var $model Menu */

$this->breadcrumbs=array(

'Menus'=&gt;array('index'),


&#036;model-&gt;id,

);

$this->menu=array(

array('label'=&gt;'Liste Objet', 'url'=&gt;array('index')),


array('label'=&gt;'Créer Objet', 'url'=&gt;array('create')),


array('label'=&gt;'Modifier Objet', 'url'=&gt;array('update', 'id'=&gt;&#036;model-&gt;id)),


array('label'=&gt;'Supprimer Objet', 'url'=&gt;'#', 'linkOptions'=&gt;array('submit'=&gt;array('delete','id'=&gt;&#036;model-&gt;id),'confirm'=&gt;'Are you sure you want to delete this item?')),


array('label'=&gt;'Gérer Objet', 'url'=&gt;array('admin')),

);

?>

<h1>Affichage Objet #<?php echo $model->id; ?></h1>

<?php echo ‘Yii::app()->locale->dateFormat = ‘.Yii::app()->locale->dateFormat.’<br/>’; ?>

<?php echo Yii::app()->dateFormatter->formatDateTime(CDateTimeParser::parse(time(), ‘yyyy-MM-dd’),‘medium’,null); ?>

<?php $this->widget(‘zii.widgets.CDetailView’, array(

'data'=&gt;&#036;model,


'attributes'=&gt;array(


	'id',


	'labelobjet',


	'urlobjet',


	 //array('name'=&gt;'relcstemenu-&gt;libellecle'),


	'commentaire',


	'actif',


	array(


	    'name' =&gt; 'datecreation',


                'value' =&gt; array(&#036;model, 'formatDate'), 


	),


	array(


	    'name' =&gt; 'datemiseajour',


                'value' =&gt; array(&#036;model, 'formatDatem'), 


	),


	'usercreation',


	'usermiseajour',


),

)); ?>

Alors maintenant le problème que j’ai est que pour mes dates il affiche toujours 01/01/1970 quelque soit la date.

Utilises les balises code, ce sera beaucoup plus lisible.

Il faut que tu renommes tes fonctions, elles ne peuvent pas porter le même nom (par ex : formatDateCrea et formatDateMaj)

Le champs “datecreation” de ton modèle existe bien, et n’est pas vide ?

il a bien une valeur lorsque je fait echo une valeur s’affiche. pour les deux fonctions ils n’ont pas le meme nom il y’a un m sur la deuxieme fonction.

C’est quoi les balise code ??

Dans ta vue oui, mais le code que tu nous a copié collé de ton modèle montre que les deux fonctions ont le même nom

Elles permettent d’afficher de manière lisible le code.

Par exemple :

echo ‘coucou’;

devient :


echo 'coucou';

Tu as un bouton (<> en bleu) pour insérer les balises.

Il me semble que “01/01/1970” est la valeur par défaut de la fonction “date” … Ce qui me laisserait penser que la date que tu passes en paramètre est vide, mais si tu arrives à l’afficher il semble que non =/

es-ce qu’il y’a pas un composant ou paramètre que je dois mettre dans mon fichier …config/main.php

Aucun.

Essayes de rajouter un die(), pour voir le contenue de ta variable :




public static function formatDate ($data,$row=null) {

   die( var_dump($data) );

   return date("d/m/Y", strtotime($data->datecreation));

} 



dans la vue si je remplace

echo array(

echo ‘name’ => ‘datecreation’,

echo ‘value’ => array($model, ‘formatDate’),

echo ),

par

echo datecreation,

une valeur s’affiche bien comme 1398179496 pour datecreation

et pour datemiseajour si je remplace

echo array(

echo ‘name’ => ‘datemiseajour’,

echo ‘value’ => array($model, ‘formatDate’),

echo ),

par

echo datemiseajour,

la valeur 1398723998 s’affiche

en ajoutant die( var_dump($data) ); voilà ce que j’obtient

mes deux dates ont bien des données.


object(Objet)[50]

  public 'cstename_search' => null

  private '_new' (CActiveRecord) => boolean false

  private '_attributes' (CActiveRecord) => 

    array (size=13)

      'id' => string '1' (length=1)

      'labelobjet' => string 'Application' (length=11)

      'labelobjetparpage' => string 'Application' (length=11)

      'urlobjet' => string '/table/index?valeur=1' (length=21)

      'idcste' => string '1' (length=1)

      'commentaire' => string 'Création d'Application' (length=23)

      'actif' => string '1' (length=1)

      'ordre' => string '1' (length=1)

      'datecreation' => string '1398179496' (length=10)

      'datemiseajour' => string '1398723998' (length=10)

      'usercreation' => string '0' (length=1)

      'usermiseajour' => string '1' (length=1)

      'supprimer' => string '0' (length=1)

  private '_related' (CActiveRecord) => 

    array (size=0)

      empty

  private '_c' (CActiveRecord) => null

  private '_pk' (CActiveRecord) => string '1' (length=1)

  private '_alias' (CActiveRecord) => string 't' (length=1)

  private '_errors' (CModel) => 

    array (size=0)

      empty

  private '_validators' (CModel) => null

  private '_scenario' (CModel) => string 'update' (length=6)

  private '_e' (CComponent) => null

  private '_m' (CComponent) => null

ID	1

Objet	Application

Url	/table/index?valeur=1

Commentaire	Création d'Application

Actif	1

Créer le	1398179496

Créer le	2014/04/22

Aaaaah d’accord.

Tu n’as pas besoin du strtotime dans ton cas




public static function formatDate ($data,$row=null) {

   return date("d/m/Y", $data->datecreation);

} 



Dis moi si ça marche !

ok cool cela marche. Merci c’est sup…

Et pour le deuxième argument de la fonction $row es ce que je pourrai l’enlever puisque je le passe pas comme paramètre.

Oui en l’occurence il ne sert à rien x)

ok super…

Maintenant que ce probleme est réglé j’ai pas envie d’écrire les deux fonctions dans tous mes models.

Alors ce que je crée une classe Mesfonctions dans laquelle je déclare mes deux fonctions




public static function formatDateMaj ($data,$row=null) {

   return date("d/m/Y", $data->datecreation);

} 

public static function formatDateCre ($data,$row=null) {

   return date("d/m/Y", $data->datecreation);

} 

le problème est comment les appelées à partir de la vue quelle changement je dois faire dans l’instruction




array (

                        'name' => 'dateCreation',

                        'value' => array($model, 'formatDate') 

                ),

ma classe fonction est bien accessible car j’arrive a accéder à d’autres fonctions qui sont dedans.

Ok j’ai vu la solution

j’ai crée une classe Fonctionsdate


<?php  $ladate=new Fonctionsdate;?>


		array(

		    'name' => 'datemiseajour',

            'value' => $ladate->formatedate($model->datemiseajour), 	),

		),