在 NodeJS 本地主机中设置时区以反映生产环境



我正在尝试在我的项目中使用日期。根据日期的休息时间,我不断得到奇怪的小变化(我住在美国东部标准时间,-5(。

生产环境默认为 UTC,我希望能够在我的本地主机环境中做到这一点。

有没有办法让我使用 express 或一些npm包以 UTC 格式启动服务器?这是机器问题吗?

我不希望使用与生产环境不同的代码。

另一个答案是设置 env 变量。

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

答案学分归 https://stackoverflow.com/a/35432069/1281089

最简单的方法是在 Docker 容器中运行代码。您可以将容器的时间设置为 UTC。

Dockerizing 基于 NodeJS 的应用程序非常容易。

示例 Docker 文件。

FROM node:carbon
# Create app directory
WORKDIR /usr/src/app
# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./
RUN npm install
# If you are building your code for production
# RUN npm install --only=production
# Bundle app source
COPY . .
EXPOSE 8080
# Actual timezone env variable set
ENV TZ Europe/Amsterdam
CMD [ "npm", "start" ]

大多数情况下,您甚至不需要手动将时间设置为 UTC。码头工人容器中的默认时间为 UTC。

互联网上充满了有关如何将nodeJS应用程序部署到docker的教程。一个好的是 https://nodejs.org/en/docs/guides/nodejs-docker-webapp/

我也会建议 Moment.js 但如果你看一些更全球化的东西,2 个提示:

  1. 比较 prod 和本地环境之间的节点版本:

https://github.com/nodejs/node-v0.x-archive/issues/3044

=> 您可能有一些版本差异来解释不同的行为

  1. 在您的本地环境中强制使用 UTC :

    export TZ=UTC (在 Linux 上(

    $env:TC = 'UTC' (在窗口上(

=> 来源:我可以使节点.js日期始终采用 UTC/GMT 吗?

我强烈建议查看Moment.js以处理JS中的日期和时间。

您应该按如下方式处理代码中的日期和时间。

moment.utc(myDate).format();

请参阅此处的文档。

然后,您的代码将使用 UTC 格式的日期和时间,无论它在何处运行。这样,您的代码将在本地显示与生产中相同的日期和时间。

STEP 1: 将 Windows 操作系统时间更改为 UTCUnited Kingdom Region(军事时间(。

STEP 2: 在 Chrome 开发工具中,将传感器设置为所需的时区。就我而言,这是EDT/EST

笔记:

确保在要实现浏览器时区更改时打开了开发工具。此外,您可能必须在新选项卡上来回切换传感器才能使其再次工作。

这是希望NodeJS的窗户能解决一些问题。

相关内容

  • 没有找到相关文章