Php YII:如何更改视图上显示的日期时间格式
Yii中的新手问题: 我有一个Yii格式的表模型,其中包含一个datetime字段 我正在使用CActiveForm显示此字段:Php YII:如何更改视图上显示的日期时间格式,php,datetime,view,model,yii,Php,Datetime,View,Model,Yii,Yii中的新手问题: 我有一个Yii格式的表模型,其中包含一个datetime字段 我正在使用CActiveForm显示此字段: <div class="row"> <?php echo $form->labelEx($model,'createdon'); ?> <?php echo $form->textField($model,'createdon', array('id'=>'createdon')); ?>
<div class="row">
<?php echo $form->labelEx($model,'createdon'); ?>
<?php echo $form->textField($model,'createdon', array('id'=>'createdon')); ?>
<?php echo $form->error($model,'createdon'); ?>
</div>
但显示的文本字段是datetime格式,来自MySQL,即yyyy-mm-dd hh:mm:ss
如何将文本字段上显示的格式更改为其他时间格式?
(可能是年月日或年月日或其他)
任何帮助都将不胜感激
谢谢 你所需要的就是使用它的方法
或者您可以使用原生PHP的方式使用函数格式化日期
我认为
PHP
手册中有很多关于格式化选项的示例(以及对每个格式修饰符的含义的解释),所以弄清楚这些并不成问题,但是如果您对Yii的CDateFormatter
有任何问题,我可以给您一些示例。如果您希望以一种格式存储日期,但是以另一种格式(即多个视图)显示,然后考虑在模型中改变它。
例如:
class Whatever extends CActiveRecord
{
protected function afterFind ()
{
// convert to display format
$this->createdon = strtotime ($this->createdon);
$this->createdon = date ('m/d/Y', $this->createdon);
parent::afterFind ();
}
protected function beforeValidate ()
{
// convert to storage format
$this->createdon = strtotime ($this->createdon);
$this->createdon = date ('Y-m-d', $this->createdon);
return parent::beforeValidate ();
}
}
覆盖哪些方法取决于您试图实现的目标
:
- beforeValidate和afterValidate:在之前和之后调用它们 进行验证李>
- beforeSave和afterSave:调用它们 保存AR实例之前和之后李>
- 删除前和删除后: 在删除AR实例之前和之后都会调用它们
- afterConstruct:对于使用 新接线员李>
- beforeFind:这是在AR查找程序启动之前调用的 用于执行查询(例如find()、findAll()李>
- 后发现:这是 在作为查询结果创建的每个AR实例之后调用
class SomeClass extends CActiveRecord
{
protected function afterFind()
{
// convert to display format
$this->my_date_time = DateTime::createFromFormat('Y-m-d H:i:s', $this->my_date_time)->format('d-m-Y');
parent::afterFind();
}
protected function beforeSave()
{
// convert to storage format
$this->my_date_time = DateTime::createFromFormat('d-m-Y', $this->my_date_time)->format('Y-m-d H:i:s');
return parent::beforeSave();
}
}
在将值显示在表单上之前,应在何处设置其格式?我可以用这样的东西吗??或者在yii模型上是否有任何事件或行为可以执行?基本上,您希望根据区域设置对日期进行格式化(您可以使用设置区域设置)。在我看来,我通过了
CDateFormatter
——这不会让我太烦恼。如果你的项目被本地化为你的区域,而你不考虑将它本地化到其他区域,你可以使用<代码>日期('D-M y),。将[CDateFormatter
]与[CLocale
]结合使用会更方便。“或者在yii模型上有任何事件或行为可以执行吗?”。我没有,但我想你可以附加一个行为。嘿。。。谢谢,afterFind()方法就是我一直在寻找的方法:)