问题描述
我正在HTML字段中使用DateTime-local
从用户那里获取日期时间。我将相同的内容发送到用于创建XML文件的后端。当我将日期发送到后端时,由于某种原因,它会将自身减去2个小时。
我没有对其进行任何更改。我目前在Central European Time (CET)
,我猜测它会自动更改为UTC time
,因为CET比UTC提前2小时。我只是想知道这里发生了什么。
我正在为项目使用HTML,AngularJS和Nodejs,以下是我的代码示例:
HTML
:
<input type="datetime-local" class="form-control" ng-model="formdata.EventTime">
例如,如果我选择:2020年10月8日下午12:30,那么在选择之后,该字段将显示为:08/10/2020 12:30
在AngularJS中,在向我的HTTP
发出NODE.js
POST请求之前,我尝试console.log
的时间出现了这样的情况:
Thu Oct 08 2020 12:30:00 GMT+0200 (Central European Summer Time)
现在,当我console.log
Node.js
时,出现的内容如下:
2020-10-08T10:30:00.000Z
我只是想知道这是否是一些默认功能? 我在其他地方找不到类似的问题,所以我将其发布。
解决方法
有一个足够简单的区别原因。两者的输出都显示同一时间,但是AngularJS日志正在以显示本地时区的RFC 2822格式格式化日期,而Node.js以UTC格式记录为ISO 8601时间的时间进行记录。
如果您在AngularJS和Node.js中都这样做:
console.log(date.toISOString());
您将获得相同的输出(例如)
2020-10-08T10:30:00.000Z
如果您尝试的话,
console.log(date.toString());
您应该会获得类似的输出,但格式为RFC 2822(例如)
Thu Oct 08 2020 12:30:00 GMT+0200 (Central European Summer Time)
,
谢谢@Terry的回复。根据他的回答,我执行了以下操作,我使用moment
将时间从UTC转换为本地时间。我的项目要求我保留日期的格式和语法。
-
在Node.js中安装
moment
库。 -
当我在
datetime-local
中选择08/10/2020 15:30时,我在Node.js
中得到以下日期:2020-10-08T13:30:00.000Z
-
我尝试使用以下方法进行转换:
EventTime = moment.utc(EventTime).local().format('YYYY-MM-DDTHH:mm:SS.sss');
-
最后我得到以下输出:
2020-10-08T15:30:00.000
我希望如果有人有同样的疑问,这可能会有所帮助。