Affichage Date Dans Le Formulaire De Mise À Jour Cjuidatepicker

Bonjour,

J’ai un problème pour afficher correctement ma date dans le formulaire de mise à jour.

Ma date est enregistré dans ma base de données sous forme d’entier. (J’utilise CDateTimeParser :: parse en mon beforeSave()).

Je n’ai pas de problème d’affichage dans la liste et détail view: la date s’affiche correctement sous la forme jj / mm / aaaa. Mais dans le formulaire de mise à jour c’est affiché comme un nombre entier.

J’ai utilisé la fonction afterFind , qui a résolu le problème dans le formulaire de mise à jour, mais ca a créer un problème dans la liste et détail view.

Que puis-je faire?

Quel est ce problème? peux tu être plus précis?


public function afterFind()

{

  $retVal = parent::afterSave();

		

  $this->date_debut=date('d/m/Y', $this->date_debut); 

  $this->date_fin=date('d/m/Y', $this->date_fin); 

	

  return $retVal;

} 



La date s’affiche correctement dans mon formulaire de mise à jour et quand je clique sur valider, j’ai cette erreur dans le view:

[b]

A non well formed numeric value encountered [/b]

Sachant que j’utilise cette fonction aussi, vu que dans ma BDD ce champs est de type int:


public function beforeSave()

{

	$this->date_debut=CDateTimeParser::parse($this->date_debut,'dd/MM/yyyy');

	$this->date_fin=CDateTimeParser::parse($this->date_fin,'dd/MM/yyyy');

	return parent::beforeSave();

}

Merci pour votre aide

J’ai essayé aussi de contourner ce problème en ajoutant cette condition dans mon _form.php


<div class="row">

		<?php echo $form->labelEx($model,'date_fin'); ?>

		<?php 

		[b]if(!$model->isNewRecord and $model->date_fin != null)

			$model->date_fin = date('d/m/Y',$model->date_fin);[/b]

			$this->widget('zii.widgets.jui.CJuiDatePicker', array(

				'model'=>$model,

				'attribute'=>'date_fin',

				'language'=>Yii::app()->language,

				'options'=>array(

					'showAnim'=>'fold',

					'format'=>'dd/mm/yyyy',

					'debug'=>true,


				),

				'htmlOptions'=>array(

					'style'=>'height:20px;'

				),

			));

		?>

		<?php echo $form->error($model,'date_fin'); ?>

	</div>

Mais ce code, me pose problème avec la fonction rules et m’affiche cette erreur:

A non well formed numeric value encountered


			array('date_fin','dateCompare','compareAttribute'=>'date_debut','operator'=>'>=', 'allowEmpty'=>true),

Voici la fonction dateCompare:


public function dateCompare($attribute,$params) 

	{

		if (empty($params['compareAttribute']) || empty($params['operator']))

		$this->addError($attribute, 'Invalide paramètre');


		$compareTo=$this->$params['compareAttribute'];


		if($params['allowEmpty'] && (empty($this->$attribute) || empty($compareTo)))

		return;

		

		//set default format if not specified

		$format=(!empty($params['format']))? $params['format'] : 'dd/MM/yyyy';


		//default operator to >

		$compare=(!empty($params['operator']))? $params['operator'] : ">";

		$start=CDateTimeParser::parse($this->$attribute,$format);

		$end=CDateTimeParser::parse($compareTo,$format);


		//a little php trick - safe than eval and easier than a big switch statement

		if (version_compare($start,$end,$compare)) {

			return;

		} else {

			$this->addError($attribute, "Date fin doit être $compare à la date début");

		}

	}

Je sais pas si je suis claire :unsure:

Comment affiches tu la date dans la vue?

salut!

bon alors c’est tout bon tout ça… (ta formule de comparaison ta view ça va.) et ton beforeSave c’est une bonne idée

je penche pour un problème de format => tente d’uniformiser toutes tes conversions de date

en utilisant partout dd/MM/yyyy par exemple…y compris dans le widget…

j’espère que ça va t’aider…

A peluche :)

Une discussion intéressante à a ce sujet ici