angular $http.post 将日期更改为 UTC 日期

新手上路,请多包涵

我试图将一些数据发布到我的具有日期的 REST api。现在,在我调试时,我的日期参数是一个 JS 日期对象,在我的时区中具有正确的日期: Tue Apr 04 2017 00:00:00 GMT+0530

在它离开我的代码后,我在网络选项卡中看到相同的内容,它被转换为 UTC 日期: "2017-04-03T18:30:00.000Z"

我搜索了解决方案,据此我需要在我的 index.html 中包含角度的语言环境文件,我这样做了:

 <script type="text/javascript" src="resources/js/angular/angular-locale_en-in.js"></script>

但它没有帮助。我见过像添加日期格式来过滤什么的解决方案,但我想要一个全球解决方案。有什么帮助吗?谢谢 :)

原文由 pranavjindal999 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 591
1 个回答

处理日期、时间和时区也让我感到困惑。可能是这个答案让您对如何处理它们有了一些了解。

在 Chrome 的开发者控制台中尝试以下代码,看看相同的日期如何以不同的格式呈现:

 var date = new Date();
date.toISOString(); // "2017-04-29T09:54:28.714Z"
date.toGMTString(); //"Sat, 29 Apr 2017 09:54:28 GMT"
date.toLocalString(); //"4/29/2017, 3:24:28 PM"

您在客户端上创建的任何日期始终以零时区偏移量记录日期,即 UTC+/-00:00 Z 。为简单起见,您可能认为 UTC 和 GMT 相同。当涉及到显示目的时,根据浏览器的时区显示相同的日期。如果你这样做 console.log (date) 它会输出 Sat Apr 29 2017 15:24:28 GMT+0530 (IST) 但这并不意味着日期的内部记录是按照浏览器的时区。它只是根据浏览器的时区显示在屏幕/控制台上。

不要将日期表示视为从一个时区转换为另一个时区,而是将它们视为同一日期的不同表示。在您的浏览器中,它表示为 GMT+0530 偏移量,当它发送到服务器时,它是零时区偏移量的同一日期。

根据您的评论,如果您选择格林威治标准时间 + 0530 时区的 4 月 4 日上午 00:00,在内部它将是格林威治标准时间 +0 的 4 月 3 日下午 18:30,即零时区偏移。让它按原样转到服务器。当您需要使用此日期时,它会在 4 月 3 日从服务器返回,并将根据浏览器的时区偏移量显示在浏览器中。不涉及转换,它是一个具有不同表示的日期。

我曾经问过一个 相关的问题,可能会增加更多的说明。

总的来说,这个答案仍然与@geminiousgoel 和@charlietfl 的答案相同。

原文由 Ritesh Jagga 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题