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

4

我正在尝试在我的项目中使用日期。由于日期被偏移5个小时(我居住在美国东部时区,-5),我始终遇到一些奇怪的小变化。

生产环境默认为UTC,我希望在我的本地环境中也能够使用UTC。

是否有一种方法可以使用express或一些npm包在UTC中启动服务器?这是一个机器问题吗?

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


一个强大的应用程序在不运行于UTC时不应该崩溃。修复错误比强制环境采用UTC时区更好。 - Evert
@Evert 嗯,new Date()会给出多个不同的结果。我想让它们都转换为UTC时间,即使nodejs是本地时间。除非你所说的“强大系统”是指我无论如何都将其转换为UTC?不用了,谢谢。 - Phil
是的,它们是不同的。然而,你仍然可以从一个本地时间的 Date 对象中获取 UTC 时间。 - Evert
太棒了!现在如果你能告诉我如何使用相同的代码库来实现这个,那将是令人惊叹的,并且回答了这个问题! - Phil
嗯,你看过这个吗:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC - Evert
5个回答

6

如果你使用PowerShell,可以尝试访问https://stackoverflow.com/a/39296961/1281089(我无法尝试这个答案,因为我没有安装Windows)。 - Ishan Thilina Somasiri
我不想改变我的电脑时间,我想改变Node.js进程的时间。 - Phil

4

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

将基于NodeJS的应用程序Docker化非常容易。

一个示例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时间。Docker容器中的默认时间将是UTC。

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


1
嗯,我本来希望只需要一行代码就能搞定……虽然 Docker 看起来很简单,但我还不知道怎么做。 - Phil
如果我的Docker容器位于欧洲,但软件要为亚洲的用户提供支持,那该怎么办呢?我需要修改我的Docker容器的时区设置来配置节点吗? - JoshuaTree
1
这并没有展示如何将容器的时间设置为UTC,也没有展示如何更改其时区。 - Vinas

3

@phil - 你能试一下在Windows上运行以下命令吗? $env:TC = 'UTC' - Steve Lng C
在什么上面?PS?CMD提示符? - Phil
Powershell - 和你运行Node的地方一样吗?谢谢! - Steve Lng C

-2

我强烈建议在JS中使用Moment.js来处理日期和时间。

你应该按照以下方式处理代码中的日期和时间。

moment.utc(myDate).format();

在这里查看文档。

无论代码在何处运行,您的代码将始终使用UTC日期和时间。这样,您的代码在本地和生产环境中显示的日期和时间将保持一致。


1
这将要求我为每个日期对象都这样做,不,谢谢。 - Phil

-2

步骤1:将Windows操作系统的时间更改为UTC英国地区(用于军事时间)。

步骤2:在Chrome开发工具中,将您的传感器设置为所需的时区。在我的情况下是EDT/EST

注意:

确保在想要实施浏览器时区更改时打开开发工具。此外,您可能需要在新标签上来回切换传感器以使其再次正常工作。

希望NodeJS能够为Windows找到解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接