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

Ubuntu 20上Node.js服务器无法设置Asia/Tehran时区的问题

Node.js 服务器时区设置问题排查与解决

问题核心

你看到的2023-08-31T08:30:32.447Z是UTC标准格式的时间输出,这是Date对象的默认ISO字符串表示(调用toISOString()的结果),本身不代表时区设置无效。德黑兰本地时间需要通过对应方法获取,同时要确保时区配置的时机正确。

排查与修复步骤

  • 确保process.env.TZ设置在最顶部
    必须将process.env.TZ = "Asia/Tehran";放在server.js的第一行,在任何require模块或Date相关代码执行前设置。如果放在后面,部分模块可能已经初始化了时区相关逻辑,导致设置不生效。
    示例:

    process.env.TZ = "Asia/Tehran";
    // 之后再引入其他模块或写业务代码
    const express = require('express');
    const app = express();
    
  • 用正确的方法验证时区
    不要直接打印new Date()(Node环境中默认输出ISO格式UTC时间),改用以下方式验证:

    // 输出带时区标识的本地时间字符串
    console.log(new Date().toString());
    // 输出符合德黑兰时区的本地化时间
    console.log(new Date().toLocaleString('fa-IR'));
    

    正常情况下,前者会显示GMT+0330 (Iran Standard Time),后者会输出伊朗本地格式的时间。

  • 重启Node进程
    如果是用PM2、systemd等进程管理器启动服务,修改代码或系统时区后必须重启进程,否则进程不会加载新的时区配置。

  • 确认系统时区生效到Node进程
    系统时区修改后,Node.js默认会继承系统时区,你可以直接在Node REPL中执行以下命令验证:

    node -e "console.log(new Date().toString())"
    

    如果输出包含伊朗时区信息,说明系统时区已经生效,无需额外设置process.env.TZ(除非需要覆盖系统时区)。

常见误区

Date对象在JavaScript中本质是UTC时间戳,所有时区转换都是显示层面的操作。直接打印new Date()在Node环境中默认返回ISO格式的UTC时间,这是正常行为,不代表时区设置失败。

内容的提问来源于stack exchange,提问作者sima

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:54:59