起因

本博客的永久链接设置为时间组合方式,并且 Hexo 的时区已经设置为 Asia/Shanghai

1
2
timezone: Asia/Shanghai
permalink: :layout/:year:month:day:hour:minute:second.html

但突然发现 cloudflare 部署后的文章 url 中的时间与本地竟然不一致,发现整整相差 8 个小时,这一般是由于时区设置导致的。而 Hexo 的时区已经设置为东 8 区 Asia/Shanghai,说明问题出在 cloudflare 上。

原因

hugo、astro 等静态站点工具通过 Cloudflare Pages 编译时使用 0 时区 format 时间,导致显示时间比实际时间早 8 个小时,需要手动设置环境变量 TZ。

修改方法

进入 cloudflare ,Workers 和 Pages ,进入该站点, 设置 -> 环境变量,编辑变量,添加 TZ = Asia/Shanghai

Vercel 上的设置方法不同

后来因为 Cloudflare 部署上会产生奇奇怪怪的问题,就迁移到 Vercel 上了,同样也出现了时区问题,按照经验在环境变量中设置 TZ 时,会提示 The name of your Environment Variable is reserved. Please choose another name. 错误,是因为 TZ 在 Vercel 中作为保留字了,应该换一种方式解决,方法参考 Vercel 设置时区 | 璃落 中使用 now.json 的方式。

即在项目根目录下创建 now.json,写入以内内容:

1
2
3
4
5
6
7
8
{
    "version": 2,
    "build": {
        "env": {
          "TZ": "Asia/Shanghai"
        }
    }
}

参考链接

为 Cloudflare Pages 设置时区 | 晨越的博客
Vercel 设置时区 | 璃落