如何在DDEV中使用Europe/Kyiv时区?解决Drupal 10时区报错
解决DDEV+Drupal 10中Europe/Kyiv时区无效的问题
临时快速修复(兼容新旧时区)
- 在Drupal的
settings.php中添加兼容逻辑,自动处理时区标识切换:
// 处理时区拼写变更兼容 $target_timezone = 'Europe/Kyiv'; if (!@date_default_timezone_set($target_timezone)) { date_default_timezone_set('Europe/Kiev'); }
- 或者直接暂时换回旧时区标识,执行命令:
ddev config --timezone=Europe/Kiev
永久修复:更新DDEV容器内的tzdata
- 先进入DDEV容器:
ddev ssh
- 根据容器基础系统更新tzdata包:
- Debian/Ubuntu系镜像:
sudo apt update && sudo apt install --only-upgrade tzdata- Alpine系镜像:
sudo apk update && sudo apk upgrade tzdata - 退出容器后重新设置时区并重启:
ddev config --timezone=Europe/Kyiv ddev restart
长期预防:自定义DDEV镜像(避免重复更新)
- 在项目根目录创建
.ddev/web-build/Dockerfile,加入tzdata更新步骤:
ARG BASE_IMAGE FROM $BASE_IMAGE # 针对Debian/Ubuntu镜像更新tzdata RUN apt-get update && apt-get install --only-upgrade -y tzdata && rm -rf /var/lib/apt/lists/* # 如果是Alpine镜像,替换为下面这行: # RUN apk update && apk upgrade tzdata && rm -rf /var/cache/apk/*
- 执行
ddev restart,DDEV会自动构建包含最新tzdata的自定义镜像
问题根源
tzdata(时区数据库)在2022年的更新中,将乌克兰基辅的时区标识从Europe/Kiev改为Europe/Kyiv以匹配官方拼写。若你的DDEV基础镜像未同步更新tzdata包,系统无法识别新标识,就会抛出无效时区的报错。
内容的提问来源于stack exchange,提问作者Vadym Tseiko
相关产品推荐
相关产品推荐

