返回 laravel 中日期时间格式字段的 unix-timestamp 格式

Posted

技术标签:

【中文标题】返回 laravel 中日期时间格式字段的 unix-timestamp 格式【英文标题】:return unix-timestamp format for datetime formatted field in laravel 【发布时间】:2017-09-19 09:37:09 【问题描述】:

我有一个像这样的Message 模型:

class Message extends Model

    protected $primaryKey = 'message_id';
    protected $dates      = ['created_at', 'updated_at', 'receiver_deleted_at', 'sender_deleted_at', 'sender_read_at', 'receiver_read_at'];

如您所见,有些日期字段以 DATETIME(YYYY-MM-DD HH:MM:SS) 格式保存日期。

但我希望在获取模型实例时所有日期字段都转换为 unix-timestamp 格式然后返回。

我知道每个字段都可以使用这样的访问器:

public function getCreatedAtAttribute()

    dd(strtotime($this->attributes['created_at']));
    return strtotime($this->attributes['created_at']);

但在这种情况下,我必须为每个字段定义一个类似上面的函数。

但我想要一种更简单的方法来强制模型以 unix-timestamp 格式返回日期字段。

【问题讨论】:

访问器负责转换为默认 DateTime 扩展的 Carbon 实例。所以,$this->created_at->format('U'); 应该可以工作。 @TomLank.,我想在调用模型转换格式的实例时返回 【参考方案1】:
protected $casts = [
    'created_at' => 'timestamp',
    'updated_at' => 'timestamp'
];

在模型中只需添加这些转换即可获得 unix 时间戳

【讨论】:

【参考方案2】:

你可以覆盖:

protected function getDateFormat()

 return 'U';

对每一列使用时间戳属性:

$model->created_at->timestamp

参考:https://laravel.com/docs/4.2/eloquent#timestamps

【讨论】:

我添加了getDateFormat 函数但得到了这个错误:Trailing data

以上是关于返回 laravel 中日期时间格式字段的 unix-timestamp 格式的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 中以编辑形式显示时间戳格式?

laravel 中 d/m/y 格式的日期格式无效问题

Laravel 时间戳格式 / JavaScript 日期

MAX日期的Laravel子查询-与父级的子查询链接中的日期时间格式无效

如何将 Laravel 输出的日期格式更改为 JSON?

在 laravel 刀片中将引导日期格式设置为 yyyy-mm-dd