Laravel 默认是使用的 UTC 时区,所以时间比北京时间少 8 个小时。

可以通过修改 config/app.php 中的 'timezone' => 'UTC','timezone' => 'Asia/Shanghai',

我想让用户可以设置自己的时区,那么我给 用户表 中添加一个 settings 的 array 字段

再创建一个 Helper 类

<?php

namespace App\Tools;

class Timezone
{
    static $timezone = null;

    public static function timezone()
    {
        if (empty(static::$timezone)) {
            if (\Auth::check()) {
                static::$timezone = \Auth::user()->settings->timezone;
            }

            if (empty(static::$timezone)) {
                static::$timezone = 'Asia/Shanghai';
            }
        }

        return static::$timezone;
    }
}

那么在使用到时间字段时加上时区即可

use App\Tools\Timezone;

echo $post->created_at->setTimezone(Timezone::timezone())->toIso8601String();

echo $post->created_at->setTimezone(Timezone::timezone())->diffForHumans();

setTimezone 方法还有两个别名 timezone()tz() 让你缩短代码。

共收到 0 条回复
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册