在我的控制器中,当我create
一个事件时,它可以完全保存。用户在dd-mm-yyyy
中输入日期,并以MySQL DATETIME
格式保存。然后details
视图使其完全正常,就像通过模型绑定的edit
视图一样。
一旦我尝试从edit
表单保存,日期就会以某种方式失败并返回1970-01-01 00:00:00
。
我不确定为什么这只发生在我的update
方法上,因为我的store
方法本质上是相同的。
$input = Input::all();
$input['plannedTime'] = date('Y-m-d H:i:s', strtotime(Input::get('plannedTime')));
update
方法如何返回没有错误,验证没问题,但仍然无法正确保存?
答案 0 :(得分:12)
'plannedTime'的值是日期格式的字符串d-m-Y H:i:s。
有你的问题。 PHP的strtotime
表现最好,但04-05-2015 00:00:00
可能是4月5日或5月4日,具体取决于您居住的地方。
例如,在我的安装中,strtotime('04-13-2014 00:00:00')
失败(将转换为0,将转换为1970-01-01)。
Laravel的date
验证需要strtotime可以处理的值。如果您使用的是不明确的日期格式,请使用createFromFormat
进行解析,然后使用format
以更标准的格式将其吐出。
$date = DateTime::createFromFormat('d-m-Y H:i:s', Input::get('plannedTime'));
$usableDate = $date->format('Y-m-d H:i:s');
答案 1 :(得分:1)
对于无效日期,MySQL永远不会返回任何错误,只要我记得,它只是将它设置为EPOCH,就是这样!
您应该强制执行日期,以便始终转换为" Y-m-d H:i:s"与您的网站通信时格式化并在" d-m-Y"中显示日期仅在输出端。
您应该尝试使用
public static DateTime DateTime::createFromFormat ( string $format , string $time [, DateTimeZone $timezone ] )
从格式创建日期时间对象。如果你知道你的格式,例如在这种情况下,那么提供格式并获取一个将被正确保留的日期对象!