Laravel:将日期保存到MySQL

时间:2015-04-15 19:21:02

标签: php mysql datetime laravel-4

在我的控制器中,当我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方法如何返回没有错误,验证没问题,但仍然无法正确保存?

2 个答案:

答案 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 ] )

从格式创建日期时间对象。如果你知道你的格式,例如在这种情况下,那么提供格式并获取一个将被正确保留的日期对象!