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

如何修改Laravel中Carbon的Asia/Tehran时区以固定为+03:30?

解决Laravel+Docker环境下Carbon固定Asia/Tehran UTC+03:30时区的问题

问题根源

Asia/Tehran时区本身包含夏令时规则,会在特定时段切换为UTC+4:30,你当前看到的结果正是夏令时生效后的状态。要强制固定为UTC+3:30,不能直接依赖系统默认的Asia/Tehran时区配置,需通过以下方案处理:

可行解决方案

方案1:直接使用固定偏移时区

跳过系统时区数据库的夏令时判断,直接指定UTC+3:30的偏移量:

// 单次调用时使用固定偏移
Carbon::now('+03:30');

// 全局生效:修改config/app.php中的时区配置
'timezone' => '+03:30',

修改全局配置后需清除配置缓存:

php artisan config:clear

方案2:自定义Carbon方法保留时区标识

如果需要显示Asia/Tehran标识但强制使用UTC+3:30,可在AppServiceProvider的boot方法中添加自定义方法:

use Carbon\Carbon;

Carbon::macro('tehranFixed', function () {
    return Carbon::now('+03:30')->setTimezoneName('Asia/Tehran');
});

// 使用示例
$fixedTime = Carbon::tehranFixed(); // 输出格式为Asia/Tehran (+03:30)

方案3:修改Docker容器时区规则(不推荐)

若要从系统层面禁用伊朗夏令时,可进入Docker容器修改时区文件:

# 进入容器
docker exec -it [容器ID/名称] bash

# 替换时区文件(需root权限,需提前准备不含夏令时规则的Tehran时区文件)
cp /path/to/custom/Tehran /usr/share/zoneinfo/Asia/Tehran

此方法维护成本高,仅适合特殊场景使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:52:13