【问题标题】:Date-time local sending time from frontend to backend chages automatically and it subtracts the time by 2 hours从前端到后端的日期时间本地发送时间自动更改,并减去 2 小时
【发布时间】:2021-01-23 09:43:28
【问题描述】:

我在 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)

现在,当我终于在我的Node.jsconsole.log 时,它看起来像这样: 2020-10-08T10:30:00.000Z

我只是想知道这是否是一些默认功能? 我在其他地方找不到类似的问题,所以我发布了这个。

【问题讨论】:

    标签: html node.js angularjs datetime datetime-format


    【解决方案1】:

    感谢@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

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

    【讨论】:

      【解决方案2】:

      造成这种差异的原因很简单。两者的输出都显示同一时刻,但是 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) 
      

      【讨论】:

      • 感谢您的回复和澄清。我尝试在node.js 中使用console.log(date.toISOString()); 并抛出错误TypeError: input.eventtimeSpecific.toISOString is not a function。无论如何我可以阻止Node.js 转换我的datetime,以便我可以保留用户选择的任何字符串。
      • 我建议将日期作为 unix 时间戳来回发送到服务器,例如UTC 格式的 1602157264 或 ISO 8601 格式的字符串。例如“2020-10-08T10:30:00.000Z”。这样可以避免根据客户端时区的不同行为。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-24
      • 2013-09-18
      • 2015-07-20
      • 2012-09-27
      • 1970-01-01
      • 2023-02-03
      • 1970-01-01
      相关资源
      最近更新 更多