You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8中Asia/Tehran时区DST显示异常问题求助

解决Laravel 8中Carbon显示伊朗过时夏令时的问题

核心原因

伊朗取消夏令时的规则更新依赖PHP的时区数据库(tzdata),如果你的PHP环境使用旧版tzdata,Carbon会沿用过时的夏令时规则。

解决步骤

  1. 更新PHP时区数据库(tzdata)

    • Linux系统(Debian/Ubuntu):
      运行以下命令更新系统时区数据并重启PHP服务:
      sudo apt update && sudo apt install --only-upgrade tzdata
      sudo systemctl restart php8.0-fpm  # 替换为你的PHP版本对应的服务名,比如php7.4-fpm
      
    • Windows系统:
      要么将PHP升级到兼容Laravel 8的最新小版本(新版本内置更新的tzdata),要么手动下载官方最新tzdata文件,替换PHP安装目录下ext\date\tzdata文件夹中的内容。
    • 通过Composer更新Carbon:
      Carbon会同步时区规则,运行命令更新到兼容Laravel 8的最新版本:
      composer require nesbot/carbon:^2.62
      
  2. 验证修复效果
    打开Laravel Tinker执行以下命令,检查时区偏移是否正确(伊朗当前固定为UTC+03:30,无夏令时切换):

    php artisan tinker
    echo Carbon::now()->format('Y-m-d H:i:s T P');
    

    若输出包含+03:30而非+04:30,说明规则已更新成功。

  3. 备选应急方案:强制固定时区偏移
    若上述方法无法立即生效,可在app/Providers/AppServiceProvider.php的boot方法中强制设置固定偏移(注意:此方法会忽略未来时区规则变更,仅作临时解决):

    use Carbon\Carbon;
    
    public function boot()
    {
        Carbon::macro('nowTehran', function () {
            return Carbon::now()->setTimezone('UTC')->addHours(3)->addMinutes(30);
        });
        // 之后使用 Carbon::nowTehran() 替代 Carbon::now()
    }
    

内容的提问来源于stack exchange,提问作者Behzad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 22:39:54