从前端到后端的日期时间本地发送时间自动更改,并将时间减去 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 转换为本地时间。我的项目要求我保留日期的格式和语法。
在 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
我希望如果其他人有同样的疑问,这可能会有所帮助。
我在 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 转换为本地时间。我的项目要求我保留日期的格式和语法。
在 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
我希望如果其他人有同样的疑问,这可能会有所帮助。