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

Laravel 12:UTC时区服务器配置定时任务于英国时间07:00执行

Laravel 12 定时任务适配伦敦时区(含夏令时)解决方案

一、正确的定时任务配置

将时区配置放在dailyAt()之前,确保Laravel先解析时区规则再处理执行时间:

$schedule->command('sign:scheduled-prescriptions')
    ->timezone('Europe/London')
    ->dailyAt('07:00');

此配置会自动将伦敦时间07:00转换为服务器UTC时间执行,且自动适配夏令时(Europe/London时区会自动处理GMT/BST的切换逻辑)。

二、排查任务未执行的核心原因

  • 验证服务器Crontab配置:必须确保服务器Crontab每分钟运行Laravel调度器,这是定时任务触发的基础:
    * * * * * cd /你的项目根目录 && php artisan schedule:run >> /dev/null 2>&1
    
  • 查看Laravel日志:检查storage/logs/laravel.log是否存在时区加载报错(需确保服务器已安装PHP intl扩展,且系统时区数据库完整)。
  • 临时测试调度逻辑:替换dailyAt('07:00')为everyMinute(),验证带时区的定时任务是否能正常触发,快速排除配置语法问题。

三、命令类的时区修正

原命令中Carbon::now()使用Laravel默认UTC时区,若需查询伦敦时区的当日处方,需修改$today的获取逻辑:

// 替换原$today赋值为伦敦时区的当日日期
$today = Carbon::now('Europe/London')->toDateString();

否则夏令时期间,伦敦时间07:00对应UTC06:00,此时UTC日期仍为前一天,会导致查询不到目标数据。

四、额外注意事项

  • 保持config/app.php中的timezone为UTC,无需修改。
  • 若服务器时区数据库缺失,可通过dpkg-reconfigure tzdata(Linux系统)更新时区数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:25:14