Laravel-5.5:在哪里可以使用 if 以所需格式显示日期?

Laravel-5.5: Where I can use my if's for display date in needed format?

我的数据库中有消息。并且在消息中有发送日期。我有 Message 模型。

代码:

<?php

namespace App;

use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Message extends Model
{
    protected $fillable = ['id', 'subject', 'message', 'from', 'to', 'created_at'];

    public function sender() {
        return $this->belongsTo(User::class, 'from');
    }

    public function receiver() {
        return $this->belongsTo(User::class, 'to');
    }

    public function getCreatedAtAttribute($date)
    {
        return \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $date)->format('M d H:i');
    }
}

如何以日期格式显示今天发送的消息 H:i。以及如何以日期格式 M-d 显示今年发送的所有消息(没有今天发送的消息)。以及如何以日期格式显示过去几年发送的消息 Y-m-d。我必须在哪里编写检查消息日期和 return 所需格式的代码?

这是我获取日期差异的代码:

echo $today =  date('Y-m-d H:i:s');

echo $message_date = "2018-01-07 01:34:35"; // Work date('H:i')
  // $message_date = "2017-01-07 01:34:35"; // Work date('Y-m-d')
  // $message_date = "2017-12-07 01:34:35"; // Work date('M d')

$date_diff = date_diff(date_create($today), date_create($message_date));

if($date_diff->days == 0) echo '<p>'.date('H:i').'</p>';
if($date_diff->y == 0 AND $date_diff->m > 0) echo '<p>'.date('M d').'</p>';
if($date_diff->y > 0) echo '<p>'.date('Y-m-d').'</p>';

我在 Laravel 中写了简单的代码,但它不起作用结束 return "Not working!"

public function getCreatedAtAttribute($date)
{
    $today =  date_create(date('Y-m-d H:i:s'));
    $message_date = date_create($date); 
    $date_diff = date_diff($today, $message_date);

    if($date_diff->days == 0) return \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $date)->format('H:i');
    if($date_diff->y == 0 AND $date_diff->m > 0) return \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $date)->format('M d');
    if($date_diff->y > 0) return \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $date)->format('Y-m-d');

    return "Not working!";
}

首先,您不应该为 created_at 日期设置访问器以将其转换为字符串。删除访问器或重命名它。

How I can display today sended messages in date format H:i.

获取消息:

Message::whereDate('created_at', Carbon::today())->get();

And how I can display all messages which sended in this year (without today sended messages) in date format M-d

Message::whereBetween('created_at', [now()->startOfYear(), Carbon::yesterday()->endOfDay()])->get();

And how display sended messages in past years in date format Y-m-d.

Message::where('created_at', '<', now()->startOfYear())->get();

要在 Blade 模板中显示消息,请使用 format(),例如:

@foreach ($messages as $message)
    {{ $message->created_at->format('H:i') }}
@endforeach