【问题标题】:Convert timestamp to date in Laravel?在 Laravel 中将时间戳转换为日期?
【发布时间】:2014-04-17 09:28:10
【问题描述】:

如何使用all() 方法从数据库返回时间戳转换为日期(d-m-Y H:i) 的所有行?

这不是created_atupdated_at 列,它是自定义属性,如果您愿意,可以将其称为birthday

【问题讨论】:

    标签: laravel laravel-4 eloquent


    【解决方案1】:

    created_at 这样的时间戳列首先被解析。 U 只是时间戳格式。您可以返回自己的格式。其他格式见date docs

    编辑:正如我在评论中所述,getDateFormat() 是两种方式(插入、选择)。你最好的选择是在模型中使用格式。示例:

    public function getMyBirthdayAttribute()
    {
        return $this->my_birthday->format('d.m.Y');
    }
    

    使用$model->my_birthday调用属性。

    // controller
    $posts = Post::all();
    
    // within sometemplate.blade.php
    @foreach($posts as $post)
        my formatted date: {{ $post->my_birthday }}
    @endforeach
    

    【讨论】:

    • 不是 created_at,updated_at。这是自定义数据,有什么区别吗?
    • 如果我尝试任何方式:Y-m-d H:i:s,它仍然返回时间戳。
    • 我明白了。 getDateFormat 用于插入和选择。如果我理解正确,您只需要一种从数据库格式化日期时间格式的简单方法。会相应地更新我的答案。
    • 如何在所有方法中使用 $model->my_birthday?真的很抱歉,但我无法正常工作,或者我收到错误或时间戳。
    • 它只是模型的一个基本属性。我添加了一个新示例以便更好地理解。
    【解决方案2】:

    恕我直言,使用 Laravel 管理日期的更好方法是使用 Laravel 内置的 getDates 访问器。

    你需要做的就是在你的模型上设置一个方法。

    public function getDates()
    {
        return [
            'my_birthday',
            'created_at',
            'updated_at',
        ];
    }
    

    这将返回一个Carbon 对象。碳在操纵日期方面非常棒。

    这是 Laravel 默认对 created_at 和 updated_at 所做的。

    然后您可以执行以下操作:

    $my_birthday->diffForHumans()  // 2 Days ago
    $my_birthday->format('d.m.Y')  // 20.02.1979
    

    这里有很多帮手。查看 Carbon 文档:https://github.com/briannesbitt/Carbon

    绝对值得学习。对于初学者来说可能并不容易理解。但是,我建议您看一下并了解它。它会改变你的生活 - 约会可能会很痛苦!

    【讨论】:

    • {{ Carbon\Carbon::parse($birthday->created_at)->format('d-m-Y H:i') }}
    【解决方案3】:

    在这种情况下,您需要转换query 中的日期,如果mysql 被用作您的数据库,那么您可以使用这样的原始查询:

    // Assumed my_birthday is like 1255033470
    $raw = DB::raw("date_format(from_unixtime(my_birthday),'%b %d, %Y %l:%i %p') as dob");
    $result = Model::get(array('id', 'username', $raw));
    

    你可以写在一行内:

    $result = Model::get(array('id', 'username', DB::raw("...")));
    

    【讨论】:

    • 抱歉,这行不通。您将始终获得输出日期 01.01.1970。
    • 为什么不呢?你的归档,时间戳是什么? 1255033470 之类的东西?
    • 从 1394902800 开始。每个日期输出为 01-01-1970。 (我已将您的示例修改为 %d-%m-%Y)
    • 检查更新的答案,将'my_birthday'更改为my_birthday
    • 原始查询方法会有弊端吗?
    【解决方案4】:

    只需将其放在您的代码上 $post 取决于你创建的内容

    $post ->created_at->format('d.m.Y')
    

    【讨论】:

      猜你喜欢
      • 2016-11-26
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 2017-04-25
      • 2022-01-08
      相关资源
      最近更新 更多