从前端到后端的日期时间本地发送时间会自动改变,它会将时间减去2小时

问题描述

我正在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转换为本地时间。我的项目要求我保留日期的格式和语法。

  1. 在Node.js中安装moment库。

  2. 当我在datetime-local中选择08/10/2020 15:30时,我在Node.js中得到以下日期: 2020-10-08T13:30:00.000Z

  3. 我尝试使用以下方法进行转换:

EventTime = moment.utc(EventTime).local().format('YYYY-MM-DDTHH:mm:SS.sss');

  1. 最后我得到以下输出:

    2020-10-08T15:30:00.000

我希望如果有人有同样的疑问,这可能会有所帮助。