我正在尝试在我的项目中使用日期。根据日期的休息时间,我不断得到奇怪的小变化(我住在美国东部标准时间,-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 个提示:
- 比较 prod 和本地环境之间的节点版本:
https://github.com/nodejs/node-v0.x-archive/issues/3044
=> 您可能有一些版本差异来解释不同的行为
-
在您的本地环境中强制使用 UTC :
export TZ=UTC (在 Linux 上(
$env:TC = 'UTC' (在窗口上(
=> 来源:我可以使节点.js日期始终采用 UTC/GMT 吗?
我强烈建议查看Moment.js以处理JS中的日期和时间。
您应该按如下方式处理代码中的日期和时间。
moment.utc(myDate).format();
请参阅此处的文档。
然后,您的代码将使用 UTC 格式的日期和时间,无论它在何处运行。这样,您的代码将在本地显示与生产中相同的日期和时间。
STEP 1:
将 Windows 操作系统时间更改为 UTC
和 United Kingdom Region
(军事时间(。
STEP 2:
在 Chrome 开发工具中,将传感器设置为所需的时区。就我而言,这是EDT/EST
笔记:
确保在要实现浏览器时区更改时打开了开发工具。此外,您可能必须在新选项卡上来回切换传感器才能使其再次工作。
这是希望NodeJS
的窗户能解决一些问题。