- .env / .env.production / .env.example 新增 TZ=Asia/Shanghai 配置 - app.ts / time.ts 从 process.env.TZ 读取,不再硬编码 - models/index.ts 日志输出使用 process.env.TZ - 前端 time.ts 加注释标记与 server/.env 同步
@@ -6,6 +6,7 @@
* 本工具提供本地时区正确的日期边界值。
*/
+// ⚠️ 与 server/.env 中的 TZ 保持一致,修改时需同步
export const TIMEZONE = 'Asia/Shanghai';
/**
@@ -2,6 +2,9 @@
PORT=3000
NODE_ENV=development
+# 统一时区配置(服务端所有时间处理 + 数据库连接以此为准)
+TZ=Asia/Shanghai
+
# MySQL 数据库
DATABASE_URL="mysql://root:password@localhost:3306/audio-book?serverTimezone=Asia/Shanghai"
@@ -1,6 +1,9 @@
# 生产环境配置
NODE_ENV=production
+# 统一时区配置(服务端所有时间处理以此为准)
# 服务端口
SERVER_PORT=3100
@@ -1,6 +1,6 @@
// Auto-deploy test comment
-// 设置时区为上海(Asia/Shanghai)确保日志和数据库时间一致
-process.env.TZ = 'Asia/Shanghai';
+// 设置进程时区(从.env读取,确保日志和数据库时间一致)
+process.env.TZ = process.env.TZ || 'Asia/Shanghai';
import Koa from 'koa';
import cors from '@koa/cors';
@@ -11,7 +11,7 @@ const prisma = new PrismaClient({
export async function connectDatabase(): Promise<void> {
try {
await prisma.$connect();
- console.log('📦 MySQL 连接成功 (Asia/Shanghai)');
+ console.log(`📦 MySQL 连接成功 (${process.env.TZ || 'Asia/Shanghai'})`);
} catch (error) {
console.error('📦 MySQL 连接失败:', error);
throw error;
@@ -9,7 +9,8 @@
* Intl.DateTimeFormat 配合 timeZone 参数能正确获取指定时区的日期。
-export const TIMEZONE = 'Asia/Shanghai' as const;
+// 从环境变量读取,与 app.ts 和 .env 保持一致
+export const TIMEZONE = (process.env.TZ as string) || 'Asia/Shanghai';
* 获取当前日期字符串(Asia/Shanghai 时区)