我正在开发一个允许用户在表单中编辑多个日期的应用程序。日期以欧洲格式 (DD-MM-YYYY) 呈现,而数据库使用默认的 YYYY-MM-DD 格式。
有几种方法可以在数据库和用户之间来回编码/解码这些数据,但它们都需要大量代码:
- 使用辅助函数在保存前和检索后转换日期(非常繁琐,需要很多代码)
- 为每个日期属性创建一个单独的属性,并使用
setNameAttribute
和getNameAttribute
方法来解码/编码(也很麻烦和丑陋,每个都需要额外的翻译/规则属性) - 在加载和提交表单时使用 JavaScript 转换日期(不是很可靠)
那么从用户那里存储、检索和验证日期和时间的最有效方法是什么?
最佳答案
在某些时候,您必须将日期从 View 格式转换为数据库格式。正如您所提到的,有很多地方可以做到这一点,基本上是在后端或前端之间进行选择。
我使用 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'
关于forms - 如何在 Laravel 中处理日期输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24965799/