AdonisJs V5 设置 timezone 不生效,如何正确配置时区?
AdonisJS 5 时区正确配置方案
AdonisJS 5 不会默认读取 .env 中的 TZ 变量自动配置全局时区,需要额外修改两处配置才能生效,完整操作步骤如下:
1. 保留.env中的时区配置
你当前 .env 里的 TZ=America/New_York 配置是正确的,无需修改直接保留即可。
2. 修改启动入口文件配置
打开项目根目录下的 server.ts 文件,在所有import语句的最顶部添加如下代码:
process.env.TZ = process.env.TZ || 'UTC'
这一步是把.env中读取到的时区参数在Node.js进程启动最早期就赋值给全局运行时变量,确保Node.js层面的时区生效。
3. 配置Lucid ORM时区(使用数据库时必填)
如果你的项目用到了AdonisJS自带的Lucid ORM,还需要修改数据库配置,确保数据库查询返回的时间也遵循设置的时区:
打开 config/database.ts,找到你正在使用的数据库连接配置,在connection配置项中新增时区参数:
- MySQL配置示例:
connections: { mysql: { client: 'mysql2', connection: { host: Env.get('MYSQL_HOST'), port: Env.get('MYSQL_PORT'), user: Env.get('MYSQL_USER'), password: Env.get('MYSQL_PASSWORD', ''), database: Env.get('MYSQL_DB_NAME'), // 新增以下行 timezone: Env.get('TZ'), } } }
- PostgreSQL配置示例:
connections: { pgsql: { client: 'pg', connection: { host: Env.get('PG_HOST'), port: Env.get('PG_PORT'), user: Env.get('PG_USER'), password: Env.get('PG_PASSWORD', ''), database: Env.get('PG_DB_NAME'), // 新增以下行 timezone: Env.get('TZ'), } } }
4. 重启服务生效
完全终止当前运行的 node ace serve --watch 进程,重新启动开发服务器后配置即可生效。
验证方式
你可以在任意路由、控制器中添加以下测试代码,确认时区是否配置正确:
// 输出内容会显示America/New_York时区即代表配置生效 console.log(new Date().toString())
内容的提问来源于stack exchange,提问作者Zeno Veiga
相关产品推荐
相关产品推荐

