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

Date-time local sending time from frontend to backend chages automatically and it subtracts the time by 2 hours

我在 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 中,就在向我的 NODE.js 发出 HTTP 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 以格式化为 ISO 的 UTC 格式记录时间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

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