【问题标题】:Return int timestamps instead of datetime返回 int 时间戳而不是 datetime
【发布时间】:2016-05-29 07:22:37
【问题描述】:

我想知道是否有一个简单的解决方案来覆盖 Laravel/Lumen 默认返回 unix 时间戳而不是返回模型时的实际日期。

    "mission": {
        "id": 1,
        "start": "2016-01-17 13:57:12",
        "end": "2016-02-17 00:00:00",
        "salary": "1000",
        "description": "Lorem ipsum dipsum chipsum, wipsum dodaskipsum wawipsum. Badatiss dum"
     }

现在我必须始终将日期时间戳转换为 unix 时间戳,无论我想在哪里使用它们(无处不在)。

例如:

        $result = Mission::all()
        ->map(function ($mission) {
            $mission->start = $this->toTimestamp($mission->start);
            $mission->end = $this->toTimestamp($mission->end);
            return $mission;
        })

【问题讨论】:

    标签: php laravel lumen


    【解决方案1】:

    您可以使用 get..Atribute mutate 模型中的日期时间:

    public function getStartAttribute($date)
    {
        return $date->getTimestamp();
    }
    

    如果$date是一个Carbon对象,你应该使用$date->timestamp

    或者您可以覆盖模型上的所有个时间戳:

    protected function getDateFormat()
    {
        return 'U'; //U = Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)
    }
    

    【讨论】:

    • 谢谢!问题是它们作为日期时间(2016-02-17 20:38:40)存储在数据库中。 getDateFormat() 会尝试在某个日期 createFromFormat('U', 2016-02-17 20:38:40) 并制造混乱。
    • 我可以使用的方法是:public function getStartAttribute($date) { return Carbon::parse($date)->timestamp; } 对于需要返回 unix-timestamps 的每一列。这是一个不错的解决方案,但如果 getDateFormat() 工作会更满意。
    【解决方案2】:

    Laravel 的 Eloquent 为日期和时间字段返回一个 Carbon 对象。

    您应该能够在整个代码中使用 Carbon 对象的时间戳属性,不确定这是否对您更容易,但可能比修改模型以适合您的特定用例更理想。

    $mission->start->timestamp
    

    看起来您正在将模型的属性直接转换为 JSON,因此更改模型(WesleyE 的解决方案)可能最适合您。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-26
      • 2014-07-08
      • 2016-06-12
      • 2018-12-26
      • 2016-12-22
      • 2018-11-26
      • 1970-01-01
      • 2022-01-07
      相关资源
      最近更新 更多