如何在Laravel中处理日期输入

Arn*_*rne 7 forms formatting localization date laravel

我正在开发一个应用程序,允许用户编辑表单中的多个日期.日期以欧洲格式(DD-MM-YYYY)呈现,而数据库使用默认的YYYY-MM-DD格式.

有几种方法可以将数据从数据库中来回编码/解码到用户,但它们都需要大量代码:

  • 使用辅助函数在保存之前和检索之后转换日期(非常繁琐,需要很多代码)
  • 为每个日期属性创建一个单独的属性,并使用setNameAttributegetNameAttribute方法进行解码/编码(同样繁琐和丑陋,需要为每个属性提供额外的翻译/规则)
  • 在加载和提交表单时使用JavaScript转换日期(不太可靠)

那么,从用户那里存储,检索和验证日期和时间的最有效方法是什么?

low*_*nds 7

在某些时候,您必须将日期从视图格式转换为数据库格式.正如您所提到的,有很多地方可以做到这一点,基本上是在后端或前端之间进行选择.

我使用javascript在客户端(前端)进行转换(您可以使用http://momentjs.com来帮助解决此问题).原因是您可能需要不同的格式,具体取决于客户端使用的区域设置(例如,在浏览器中或在其配置文件首选项中设置).在前端进行格式转换可以让您轻松转换为这些不同的日期格式.

另一个优点是,您可以使用protected $dates模型中的属性让Laravel自动处理(获取和设置)这些日期作为Carbon对象,而无需您执行此操作(请参阅https://github.com/laravel/ framework/blob/master/src/Illuminate/Database/Eloquent/Model.php#L126).

至于验证,您需要使用Laravel的日期内置验证规则,如下所示:

'date' => 'required|date|date_format:Y-n-j'
Run Code Online (Sandbox Code Playgroud)

  • "在验证字段时,您应该使用date或date_format,而不是两者都使用." - [Laravel Docs](https://laravel.com/docs/5.2/validation#rule-date-format) (6认同)