如何在Node.js中设置默认时区



如何在node.js中设置默认时区?

根据这个谷歌群组线程,您可以在调用任何日期函数之前设置 TZ 环境变量。刚刚测试过它,它可以工作。

> process.env.TZ = 'Europe/Amsterdam' 
'Europe/Amsterdam'
> d = new Date()
Sat, 24 Mar 2012 05:50:39 GMT
> d.toLocaleTimeString()
'06:50:39'
> ""+d
'Sat Mar 24 2012 06:50:39 GMT+0100 (CET)'

不过,您以后无法更改时区,因为那时 Node 已经读取了环境变量。

至少在 Linux 环境中似乎对我有用的另一种方法是像这样运行您的 Node.js 应用程序:

env TZ='Europe/Amsterdam' node server.js

这至少应该确保从一开始就正确设置时区。

这是一个 100% 的工作示例,用于在 NodeJs 中获取自定义时区日期时间,而无需使用任何外部模块:

const nDate = new Date().toLocaleString('en-US', {
  timeZone: 'Asia/Calcutta'
});
console.log(nDate);

不幸的是,设置process.env.TZ效果不佳 - 基本上不确定更改何时生效(。

因此,在启动节点之前设置系统的时区是您唯一正确的选择。

但是,如果您无法做到这一点,应该可以使用节点时间作为解决方法:以本地或 UTC 时间获取时间,并将其转换为所需的时区。请参阅如何在 Nodejs 中使用时区偏移量?了解详情。

只需在主文件中设置环境变量,如索引.js或应用程序.js或主文件.js或任何文件名:

process.env.TZ = "Asia/Tehran";

这将设置将在整个节点应用程序中使用的时区

从节点 13 开始,您现在可以重复设置process.env.TZ,它将反映在新 Date 对象的时区中。我不知道我是否会在生产代码中使用它,但它在单元测试中肯定会有用。

> process.env.TZ = 'Europe/London';
'Europe/London'
> (new Date().toString())
'Fri Mar 20 2020 09:39:59 GMT+0000 (Greenwich Mean Time)'
> process.env.TZ = 'Europe/Amsterdam';
'Europe/Amsterdam'
> (new Date().toString())
'Fri Mar 20 2020 10:40:07 GMT+0100 (Central European Standard Time)'

env TZ='Europe/Amsterdam' node server.js> @uhef 的解决方案适用于您的应用程序无法使用分叉进程的情况,但当您使用分叉进程时,特别是当您使用构建工具(如 gulp (启动应用程序时,命令gulp将采用 env 值,但由 gulp 创建的进程不是(您的应用程序(。

要解决此问题,您必须执行以下操作:

$ export TZ="Europe/Amsterdam"; gulp myTask

这将为您正在处理的控制台中启动的所有进程设置 TZ 环境变量,包括在同一控制台中执行 gulp 命令后执行的所有后续进程,而无需再次使用前缀 export TZ="Europe/Amsterdam"; 执行它们。

设置服务器时区并使用 NTP 同步。这是更改服务器时间的一种更好的解决方案。

列出时区

timedatectl list-timezones

设置时区

sudo timedatectl set-timezone America/New_York

验证时区

timedatectl

我更喜欢为我的服务器和数据库使用 UTC 时区。任何转换都必须在客户端上处理。我们可以利用时刻.js在客户端。

维护许多实例也很容易,

我知道这个线程很旧,但我认为这将帮助像我这样的从谷歌登陆这里的人。

在 GAE Flex (NodeJs( 中,您可以在 app.yaml 文件中设置环境变量 TZ(管理应用程序中所有日期时区的变量(,我在这里给你举一个例子:

app.yaml

# [START env]
env_variables:
  # Timezone
  TZ: America/Argentina/Buenos_Aires

以下是将 Node.js 应用程序部署到 Amazon AWS Elastic Beanstalk 的用户的答案。我还没有在其他任何地方看到这个记录:

Configuration -> Software -> Environment Properties 下,只需设置键值对TZ和您的时区,例如 America/Los Angeles ,然后应用更改。

您可以通过在 Node 应用程序中输出new Date().toString()并注意时区后缀来验证效果。

您可以通过将环境变量TZ设置为 UTC 来强制执行 Node.js 流程时区

所以所有时间都将以 UTC+00:00 为单位进行测量

完整列表: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

示例包.json:

{
  "scripts": {
    "start": "TZ='UTC' node index.js"
  }
}
更新节点

.js v13

正如@Tom指出的那样,现在 v13 中内置了完整的 ICU 支持。因此,可以省略设置步骤。您仍然可以自定义在运行时构建或使用 ICU 的方式:https://nodejs.org/api/intl.html

对于 Windows 上的 node.js,您可以执行以下操作:

  1. 安装完整 icu(如果已安装(,这将正确应用日期区域设置

    npm i full-icu或全球:npm i -g full-icu

  2. 在代码中使用 toLocaleString((,例如:

    new Date().toLocaleString('en-AU', { timeZone: 'Australia/Melbourne' })

    这将产生类似以下内容:25/02/2019, 3:19:22 pm .如果您更喜欢 24 小时,"en-GB"将产生:25/02/2019, 15:19:22

对于节点.js作为 Azure Web 应用,除了 WEBSITE_TIME_ZONE 的应用程序设置外,还需要将NODE_ICU_DATA设置为 例如 <your project>node_modulesfull-icu,当然是在你完成 npm i 全重症监护室之后。不建议在 Azure 上全局安装包,因为该目录是临时的,可以清除。

裁判:1. NodeJS 未正确应用日期语言环境

  1. 您还可以使用intl选项构建节点.js更多信息

您只需要在启动应用时设置它。

{
  "scripts": {
    "start:timezone": "TZ='utc' node index.js",
    "start": "TC=$tz node index.js"
  }
}

在 CI 或要启动应用的任何位置,可以像npm run start:timezone一样静态运行它,也可以像 npm run start utc 一样动态地将时区传递给进程

另一种方法是在应用的入口点中设置它,如下所示:

process.env.TZ = "UTC";

你可以采取时刻时区。它可以让您设置位置,还可以处理夏令时。

有时您可能在其他地方的虚拟服务器上运行代码 - 当运行 NODEJS 或其他风格时,这可能会变得混乱。

这是一个修复程序,可让您轻松使用任何时区。

在此处查看时区列表

只需将您的时区短语放在 FORMAT 行的括号内即可。

在这种情况下 - 我正在将 EPOCH 转换为东方。

//RE: https://www.npmjs.com/package/date-and-time
const date = require('date-and-time');
let unixEpochTime = (seconds * 1000);
const dd=new Date(unixEpochTime);
let myFormattedDateTime = date.format(dd, 'YYYY/MM/DD HH:mm:ss A [America/New_York]Z');
let myFormattedDateTime24 = date.format(dd, 'YYYY/MM/DD HH:mm:ss [America/New_York]Z');

我使用这个 npm 包 Unix-system-timezone

您可以使用库 tzdata 配置全局时区:

npm install tzdata -y

使用变量设置环境后,例如:TZ=美国/波哥大

并在项目中进行测试:

new Date()

希望对您有所帮助

const nDate = new Date().toLocaleString('en-US', {
  timeZone: 'Asia/Seoul'
});
console.log(nDate);

只需在应用程序上process.env.TZ = "Asia/Dhaka"; //SET Default Timezone.js导入模块后,它将适用于您的整个项目。

这有效;https://stackoverflow.com/a/53282481/17700714

var date = new Date('2016-08-25T00:00:00')
var userTimezoneOffset = date.getTimezoneOffset() * 60000;
new Date(date.getTime() - userTimezoneOffset);

相关内容

  • 没有找到相关文章