Laravel 中的 timestampTz 字段

cee*_*yoz 7 laravel timestamp-with-timezone php-carbon

Laravel 5.4 支持TIMESTAMP WITH TIME ZONE迁移中的 Postgres字段类型:

$table->timestampTz('scheduled_for');
Run Code Online (Sandbox Code Playgroud)

Laravel 可以设置为将日期字段 ( DATE, DATETIME, TIMESTAMP) 转换为 Carbon 对象(默认情况下为created_atupdated_at TIMESTAMP字段这样做),但放入scheduled_for$dates字段会导致时区感知版本出错:

InvalidArgumentException with message 'Trailing data'
Run Code Online (Sandbox Code Playgroud)

查看数据库和修补程序,该字段的值似乎类似于2017-06-19 19:19:19-04. 是否有一种本地方法可以从这些字段类型之一中获取 Carbon 对象?还是我一直在使用访问器?

Jim*_*ein 12

重新提出这个问题,希望有一个有用的答案被接受。

Laravel 采用Y-m-d H:i:s数据库时间戳格式。如果您使用的是 Postgrestimestampz列,那显然是不同的。您需要告诉 Eloquent 如何让 Carbon 解析该格式。

简单地$dateFormat在模型上定义属性,如下所示:

Class MyModel extends Eloquent {

    protected $dateFormat = 'Y-m-d H:i:sO';

}
Run Code Online (Sandbox Code Playgroud)

信用到期的信用:我在GitHub 问题中找到了这个解决方案