Traduction de l’article »Using International Dates » de RussellEngland que vous trouverez ici. Lorsque « je » est utilisé, il s’agit bien évident de l’auteur d’origine RussellEngland.
Introduction
J’ai eu besoin d’utiliser des dates aux formats britannique (dd/mm/yyyy) dans mon application, mais il m’a été difficile de trouver des exemples sur la manière de faire jusqu’au jour ou j’ai trouvé de comment le faire – jusqu’à ce que je trouve sur ce forum un excellent « post » http: // www.yiiframework.com/forum/index.php ?/topic/3649-dealing-with-i18n-date-formats/
De ces « posts », j’ai réalisé une solution complète : j’ai noté qu’il fallait que j’utilise le format de date ‘court’.
Définir la variable locale
Ajoutez cette ligne à protected/main/config.php, à ajouter après le nom d’application
return array( 'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..', 'name'=>'My Application', 'sourceLanguage'=>'en_gb', |
Définissez la règle de validation ¶
Dans votre modèle, eg : protected/models/client.php ajouter cette règle de format pour n’importe quelles dates
public function rules() { return array( ... array('date_of_birth','date','format'=>Yii::app()->locale->getDateFormat('short')), ... |
Dates d’épargne ¶
J’ai modifié le « post » du forum pour les dates courtes. De nouveau c’est dans votre modèle
protected function beforeSave() { if(parent::beforeSave()) { // Format dates based on the locale foreach($this->metadata->tableSchema->columns as $columnName => $column) { if ($column->dbType == 'date') { $this->$columnName = date('Y-m-d', CDateTimeParser::parse($this->$columnName, Yii::app()->locale->getDateFormat('short'))); } elseif ($column->dbType == 'datetime') { $this->$columnName = date('Y-m-d H:i:s', CDateTimeParser::parse($this->$columnName, Yii::app()->locale->getDateTimeFormat('short'))); } } return true; } else return false; } |
Formater les dates
Et finalement formaté vos dates au retour de la fonction de recherche dans votre modèle.
protected function afterFind() { // Format dates based on the locale foreach($this->metadata->tableSchema->columns as $columnName => $column) { if (!strlen($this->$columnName)) continue; if ($column->dbType == 'date') { $this->$columnName = Yii::app()->dateFormatter->formatDateTime( CDateTimeParser::parse( $this->$columnName, 'yyyy-MM-dd' ), 'short',null ); } elseif ($column->dbType == 'datetime') { $this->$columnName = Yii::app()->dateFormatter->formatDateTime( CDateTimeParser::parse( $this->$columnName, 'yyyy-MM-dd hh:mm:ss' ), 'short','short' ); } } return true; } |
Changer la langue de destination
En théorie (je ne l’ai jamais testé) vous devriez pouvoir changer la langue à la volée – mon idée est lorsqu’un utilisateur se connecte, la variable locale est mise à jour dans la fonction « afterlogin » et les dates sont formatées selon la langue.
Yii::app()->setLanguage($lang); |


















Commentaires récents