Php Laravel:将日期保存到MySQL

Php Laravel:将日期保存到MySQL,php,mysql,datetime,laravel-4,Php,Mysql,Datetime,Laravel 4,在我的控制器中,当我创建一个事件时,它保存得非常好。用户以dd-mm-yyyy格式输入日期,并以MySQLDATETIME格式保存。然后,details视图将其完全渲染,就像通过模型绑定的edit视图一样。 当我试图从编辑表单中保存时,日期以某种方式失败并返回1970-01-01 00:00:00 我不太清楚为什么这只发生在我的update方法上,因为我的store方法本质上是相同的 $input = Input::all(); $input['plannedTime'] = date('Y-m

在我的控制器中,当我创建一个事件时,它保存得非常好。用户以
dd-mm-yyyy
格式输入日期,并以MySQL
DATETIME
格式保存。然后,
details
视图将其完全渲染,就像通过模型绑定的
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
方法没有返回错误,验证是可以的,但它仍然不能正确保存它?

MySQL从来没有为无效日期返回任何错误,就我所记得的,它只是将它设置为历元,就是这样

在与站点通信时,应强制将日期始终转换为“Y-m-d H:i:s”格式,并仅在输出端以“d-m-Y”格式显示日期

你应该试着使用它

public static DateTime DateTime::createFromFormat ( string $format , string $time [, DateTimeZone $timezone ] )
从格式创建日期时间对象。如果您知道您的格式(如本例中的格式),那么请提供该格式并获取一个日期对象,该对象将正确保留


“plannedTime”的值是一个日期格式为d-m-Y H:i:s的字符串

这是你的问题。PHP的strotime尽了最大努力,但是
04-05-2015 00:00:00
可能是4月5日或5月4日,具体取决于您居住的地方

例如,在我的安装中,
strotime('04-13-2014 00:00:00')
失败(将转换为0,将转换为1970-01-01)

Laravel的
date
验证需要一个strotime可以处理的值。如果使用的日期格式不明确,请使用
createFromFormat
对其进行解析,然后使用
format
以更标准的格式将其输出

$date = DateTime::createFromFormat('d-m-Y H:i:s', Input::get('plannedTime'));
$usableDate = $date->format('Y-m-d H:i:s');

Input::get('plannedTime')
的值是多少?
plannedTime'的值是一个日期格式
d-m-Y H:i:s
字符串。谢谢你的快速回答,马修!现在,当我在模型中通过验证运行编辑的plannedTime时,我收到一个错误“计划时间不是有效日期”。我的模型将“plannedTime”描述为“required | date”。将代码更改为:
$date=DateTime::createFromFormat('d-m-Y H:i:s',Input::get('plannedTime')
$input['plannedTime']=$date->format('Y-m-dh:i:s')
立即接收对布尔值上的成员函数format()的调用
(本例中为$date)。如果
$date
是布尔值
输入::get('plannedTime')
不是
d-m-Y H:i:s