【问题标题】:Laravel: saving date to MySQLLaravel:将日期保存到 MySQL
【发布时间】:2015-06-21 22:19:56
【问题描述】:

在我的控制器中,当我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方法怎么没有返回错误,验证没问题,但还是不能正确保存?

【问题讨论】:

  • Input::get('plannedTime') 的值是多少?
  • “plannedTime”的值为string,日期格式为d-m-Y H:i:s

标签: php mysql datetime laravel-4


【解决方案1】:

据我所知,MySQL 从不返回无效日期的任何错误,它只是将其设置为 EPOCH 而已!

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

你应该尝试使用

public static DateTime DateTime::createFromFormat ( string $format , string $time [, DateTimeZone $timezone ] )

从格式创建日期时间对象。如果您知道您的格式,例如在这种情况下,请提供格式并返回一个日期对象,该对象将被正确持久化!

【讨论】:

  • 感谢您的快速回答,马修!现在,当我通过模型中的验证运行编辑的计划时间时,我收到一个错误“计划时间不是有效日期”。我的模型将“plannedTime”描述为“必需|日期”。
【解决方案2】:

'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');

【讨论】:

  • 将代码更改为:$date = DateTime::createFromFormat('d-m-Y H:i:s', Input::get('plannedTime'));$input['plannedTime'] = $date->format('Y-m-d H:i:s'); 现在接收Call to a member function format() on boolean(本例中为 $date)。
  • 如果 $date 是布尔值 Input::get('plannedTime') 不是 d-m-Y H:i:s
猜你喜欢
  • 2017-02-03
  • 2019-12-18
  • 2019-11-15
  • 1970-01-01
  • 1970-01-01
  • 2019-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多