$ dateFormat变量在Laravel模型中实际做了什么?

时间:2017-09-24 19:21:24

标签: laravel date datetime

如果我设置此变量,我看不出任何差异。

我需要一些基本的例子

如果设置了此变量:

protected $dateFormat = "d.m.Y H:i";

它有什么区别?

P.S。我已经在Docu中读过了,但是目前还不清楚这个日期格式在哪里实际使用过?

https://laravel.com/docs/5.5/eloquent-mutators#date-mutators

更新

  • 使用jQuery datetimepicker本地化,以便保存的日期采用以下格式:“25.09.2017 08:04”
  • 将迁移中的列数据类型从timestamp更改为dateTime。
  • 将config / app.php中的时区更改为:'timezone' => 'Europe/Berlin',
  • 将变量设置为:

    protected $dateFormat = "d.m.Y H:i";
    

我在表单提交时收到错误:

enter image description here

如果我没有设置变量

我收到此错误:

enter image description here

2 个答案:

答案 0 :(得分:1)

TL; DR:您的$dateFormat用于解析传入的帖子数据,并格式化发送到您数据库的数据。这意味着,如果没有任何其他代码(读取:覆盖此设置的setter),您的UI必须使用与数据库相同的日期时间格式。

$dateFormat HasAttributes::asDateTime使用$casts。此方法在许多地方用于处理将属性自动转换为适当的数据类型。这包括$dates数组和Model::fill(...)数组。

一个常见的调用是通过HasAttributes::setAttribute(...)> HasAttributes::fromDateTime(...)> Model::__set(...)。请注意,HasAttributes::setAttribute(...)也会调用$dateFormat。这意味着当您使用批量赋值/可填充时,或者使用$model->myField = ...;直接设置属性时,HasAttributes::fromDateTime(...)用于解析来自[假定]表单帖子的传入字符串值。您希望将格式设置为浏览器发布的内容,以便可以将值正确地解析为Carbon对象。

然后将Carbon对象序列化为$dateFormat中的字符串,这意味着Laravel将日期时间值作为字符串处理,这在研究时会让我感到惊讶。这意味着$ attributes数组包含日期时间值的字符串表示形式,并且这些字符串值将发送到数据库。 这意味着with open('/path/to/your/file.name', 'w') as f: f.write('text') 需要生成数据库支持的字符串值。

请记住,这是提交时的日期时间值的格式,未显示。例如,datetime-local html5数据类型在格式化datetime时将使用本地语言环境,但始终以指定的格式发布值。

  

需要注意的一点是显示的日期格式与实际值不同 - 将根据用户操作系统的设置区域设置选择显示的日期格式,而日期值始终格式为yyyy- MM-DDTHH:毫米

来源:parse incoming strings into Carbon objects

答案 1 :(得分:-1)

这是它在数据库中保存的格式。