Laravel 5,PgSQL和Date格式

时间:2017-04-21 12:17:31

标签: postgresql laravel date laravel-5 format

我正在努力使用Laravel日期格式,并将其与PgSQL一起使用。

我的需要:

  • 输入日期必须采用此ISO8601格式:Y-m-d\TH:i:s\Z(例如:2016-05-13T10:05:00Z)
  • 输出格式必须相同
  • PgSQL以Y-m-d H:i:s格式存储(例如:2016-05-13 10:05:00)

困难的部分是将Laravel配置为全局接受输入和输出中的特定日期格式,但不更改“内部”格式。

可以覆盖属性以自定义格式,但它可以全局操作:

protected $dateFormat = 'Y-m-d\TH:i:s\Z';

从数据库中检索日期时会导致错误(尝试使用自定义掩码转换PgSQL日期:InvalidArgumentException)。

我想避免使用中间件或在每个控制器响应中手动执行,有什么办法吗?

1 个答案:

答案 0 :(得分:1)

听起来你想使用访问器和mutator。这是一个具有my_date列的类的基本示例,转换可能不完全正确(我只是假设strtotime()将起作用)但这应该很容易修复。

class SomeModel extends Model
{
    // triggered whenever you retrieve the date from the db
    public function getMyDateAttribute($value)
    {
        return date('Y-m-d\TH:i:s\Z', strtotime($value));
    }

    // triggered whenever you insert the date into the db
    public function setMyDateAttribute($value)
    {
        $this->attributes['my_date'] = date('Y-m-d H:i:s', strtotime($value));
    }
}

现在,您的数据库可以使用一种日期时间格式,而应用程序的其他部分可以使用另一种。如果您希望它可以重复用于其他模型,只要列的名称相同,就可以将其提取到特征。