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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:45:03