Datetime Yii:以DB格式保存日期和时间
通过模型在DB中保存日期时遇到问题。在我的控制器中,如果我在日志中转储从$\u POST收到的日期,我将以这种格式获取日期“10/Nov/2012 07:30”。如果我使用:Datetime Yii:以DB格式保存日期和时间,datetime,model,yii,Datetime,Model,Yii,通过模型在DB中保存日期时遇到问题。在我的控制器中,如果我在日志中转储从$\u POST收到的日期,我将以这种格式获取日期“10/Nov/2012 07:30”。如果我使用: $AccountAppointment->start_date=Yii::app()->dateFormatter->format($_POST['AccountAppointment']['start_date'], 'dd/M/yyyy HH:mm'); 我得到一个错误: Invalid datet
$AccountAppointment->start_date=Yii::app()->dateFormatter->format($_POST['AccountAppointment']['start_date'], 'dd/M/yyyy HH:mm');
我得到一个错误:
Invalid datetime format: 1292 Incorrect datetime value: '10/NoGMT+5/2012 07:30' for column 'start_date'
将dateFormatter中的格式更改为“dd/M/yyyy HH:mm”或“dd/mm/yyyy HH:mm”或“dd/MMM/yyyy HH:mm”会引发相同的错误
Db是MySQL 5.0,Yii版本1.1.12
任何帮助都将不胜感激,我几乎被卡住了……谢谢……我过去曾使用过类似的方法。我使用CDateTimeParser来解析日期,然后按照您想要的方式格式化它
echo Yii::app()->dateFormatter->formatDateTime(
CDateTimeParser::parse($classified->create_date, 'yyyy-MM-dd'
),'medium',null);
我想你可以做到这一点:
echo Yii::app()->dateFormatter->formatDateTime(
CDateTimeParser::parse($classified->create_date, 'dd/MMM/yyyy HH:mm'
),'full',null);
或
您使用了错误的格式。“Nov”对应于模式
MMM
,而不是M
(这是一个没有前导零的整数月份)。我找不到将dd/MMM/yyyy HH:mm日期格式转换为MySQL的任何转换,因此创建了我自己的方法。这只是一个解决办法,一旦我想出一个更优雅的解决方案,我就会更新我的答案。以下是我创建的方法:
public function returnDate($inputDate){
//Input format of date is : dd/MMM/yyyy HH:mm, example: 02/Feb/2012 18:20. The method converts the format to YYYY-MM-DD H:i which is compliant to MySQL 5.0 or above.
$retval='';
$dd=substr($inputDate, 0,2);
$mm=substr($inputDate, 3,3);
$yy=substr($inputDate,7,4);
$tt=substr($inputDate,12,5);
$month=0;
switch($mm){
case "Jan":
$month='01';
break;
case "Feb":
$month='02';
break;
case "Mar":
$month='03';
break;
case "Apr":
$month='04';
break;
case "May":
$month='05';
break;
case "Jun":
$month='06';
break;
case "Jul":
$month='07';
break;
case "Aug":
$month='08';
break;
case "Sep":
$month='09';
break;
case "Oct":
$month='10';
break;
case "Nov":
$month='11';
break;
case "Dec":
$month='12';
break;
}
$retval=$yy.'-'.$month.'-'.$dd.' '.$tt;
return $retval;
}
更改日期选择器中的格式,默认为yy-mm-dd我认为您不了解格式功能。请看下面
/**
* Formats a date according to a customized pattern.
* @param string $pattern the pattern (See {@link http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns})
* @param mixed $time UNIX timestamp or a string in strtotime format
* @return string formatted date time. Null if $time is null. (the null value check is available since Yii 1.1.11)
*/
public function format($pattern,$time){
----------------------
}
您需要切换日期格式和时间。
这是正确的:
$AccountAppointment->start_date=Yii::app()->dateFormatter->format('dd/MM/yyyy HH:mm' ,$_POST['AccountAppointment']['start_date']);
希望我能帮助某人:)您可以使用内置的CDateTimeParser:
date('Y-m-d H:i:s', CDateTimeParser::parse($input, $format, array('second'=>0)))
测试:
此外,我还为上述内容编写了一个包装器函数,以考虑比较运算符,因此您可以在CGridView过滤器中使用本地化的日期时间。也许这会有所帮助。请参阅:我尝试了问题中提到的所有选项,请查看问题中错误陈述后的文本。感谢Tim的反馈。不幸的是,你建议的选项都不起作用。在浪费了将近一天的时间后,我继续创建自己的方法,将日期转换为所需的格式。我已经把我的解决方案作为答案,以防它可能会帮助别人。无论如何,谢谢你。
date('Y-m-d H:i:s', CDateTimeParser::parse($input, $format, array('second'=>0)))
$inputs = array('10/Nov/2012 07:30', '31/Jan/2012 23:59');
$format = 'dd/MMM/yyyy HH:mm';
foreach($inputs as $input)
{
echo $input . ' -> ' . date('Y-m-d H:i:s', CDateTimeParser::parse($input, $format, array('second'=>0)));
echo '<br>';
}
10/Nov/2012 07:30 -> 2012-11-10 07:30:00
31/Jan/2012 23:59 -> 2012-01-31 23:59:00