【问题标题】:Laravel Create Date return different formatLaravel 创建日期返回不同的格式
【发布时间】:2021-05-18 04:34:43
【问题描述】:

我尝试从数据库中选择create_data,数据库中的日期格式类似于“2021-05-18 11:06:01”,但是当我检索并显示它时,它会显示类似于“ 2021-05-18T03:06:01.000000Z”。有谁知道为什么会变成这样?我想要实际上类似于数据库存储的日期,即“2021-05-18 11:06:01”。但是DB里面的create_date格式是UTC+8,但是接收的时候会显示UTC格式。

数据返回

[0] => Array (
    [id] => 1
    [log_name] => login
    [description] => login
    [subject_type] => App\Models\Users
    [subject_id] => 0
    [causer_type] => App\Models\User
    [causer_id] => 2
    [properties] => ""         
    [created_at] => 2021-05-18T03:06:01.000000Z
);

代码

$lastLoggedActivity = ActivityLog::where('causer_id', $userid)
    ->orWhereIn('subject_id', $selectparentid)
    ->with('getLogType')
    ->with('getCauserDetails')
    ->orderBy('created_at', 'desc')
    ->get()
    ->toArray();

【问题讨论】:

  • created_at 默认是碳实例,所以格式是这样的。你可以随意格式化它。
  • @zahidhasanemon,即使我将 app.php(时区)设置为我想要的,日期也会返回这样的格式

标签: php laravel eloquent


【解决方案1】:

在 ActivityLog 模型中添加这个,

use Carbon\Carbon;

public function getCreatedAtAttribute($value)
{
    return Carbon::parse($value)->format('Y-m-d H:i:s');
}

【讨论】:

    【解决方案2】:

    向您的模型添加 serializeDate 方法以更改其响应格式。

    /**
     * Prepare a date for array / JSON serialization.
     *
     * @param  \DateTimeInterface  $date
     * @return string
     */
    protected function serializeDate(DateTimeInterface $date)
    {
        return $date->format('Y-m-d H:i:s');
    }
    

    【讨论】:

      【解决方案3】:

      我必须像上面的@yudiz-solutions 那样使用突变器,但在添加时区值之前无法完全实现我想要的:

      public function getCreatedAtAttribute($value)
      {
          return Carbon::parse($value)->timezone('Africa/Nairobi')->format('Y-m-d H:i:s');
      }
      

      public function getCreatedAtAttribute($value)
      {
          return Carbon::parse($value)->timezone('Africa/Nairobi')->toDateTimeString();
      }
      

      注意:Documentation 建议使用 UTC 时区:

      在整个应用程序中始终使用 UTC 时区将 提供与其他日期的最大互操作性 用 PHP 和 JavaScript 编写的操作库。

      【讨论】:

        【解决方案4】:

        因为 laravel 自动转换 created_at 和 updated_at,您可以在 this 阅读更多内容并将 created_at 添加到模型:

        protected $casts = [
            'created_at' => 'datetime:Y-m-d H:i:s',
        ];
        

        【讨论】:

        • 您好,好像在 DB 里面的格式是 UTC +8,但是收到时会显示 UTC 格式。
        • 你可以通过更改 config/app.php 中的时区来更改 laravel 存储时区的方式
        • 设置 ald,但还是一样
        • 变为 2021-05-18 03:06:01,而不是 2021-05-18 11:06:01
        • 它只影响插入新记录
        猜你喜欢
        • 2021-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-19
        • 2019-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多