pra*_*999 25 javascript timezone internationalization angularjs
我试图将一些数据发布到我的REST api,它有日期.现在,当我调试时,我的日期参数是一个JS Date对象,在我的时区中具有正确的日期:Tue Apr 04 2017 00:00:00 GMT+0530
在它离开我的代码后,我在网络选项卡中看到相同的内容,它将转换为UTC日期: "2017-04-03T18:30:00.000Z"
我搜索了解决方案,我需要在index.html中包含angular的locale文件,我做了:
<script type="text/javascript" src="resources/js/angular/angular-locale_en-in.js"></script>
Run Code Online (Sandbox Code Playgroud)
但它没有帮助.我已经看到了添加日期格式来过滤等问题的解决方案,但我想要一个全局解决方案.有帮助吗?谢谢 :)
Rit*_*gga 14
处理日期,时间和时区也让我很困惑.可能这个答案可以帮助您了解如何处理它们.
在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"
Run Code Online (Sandbox Code Playgroud)
您在客户端上创建的任何日期始终记录零时区偏移的日期,即UTC+/-00:00 Z.为简单起见,您可能认为UTC和GMT相同.在显示目的时,根据浏览器的时区显示相同的日期.如果你这样做console.log (date)会输出,Sat Apr 29 2017 15:24:28 GMT+0530 (IST)但这并不意味着日期的内部记录是根据浏览器的时区.它只是根据浏览器的时区在屏幕/控制台上显示.
查看日期表示不是从一个时区转换为另一个时区,而是将它们视为同一日期的不同表示.在您的浏览器中,它表示为GMT+0530偏移量,当它发送到服务器时,它是零时区偏移量的相同日期.
根据您的评论,如果您选择4月4日凌晨00:00 GMT + 0530时区,内部将于4月3日下午18:30在格林威治标准时间+ 0,即零时区偏移.让它按原样进入服务器.当您需要使用此日期时,它将在4月3日从服务器返回,并将根据浏览器的时区偏移量显示在浏览器中.没有涉及转换,它是一个具有不同表示的日期.
我曾经问过一个相关的问题,可能会增加更多的澄清.
总的来说,这个答案仍然与@geminiousgoel和@charlietfl答案相同.
设想 :
将日期从UIintoAPI call作为epoch time(UNIX 时间)而不是date字符串发送。您可以使用getTime()方法将日期转换为纪元时间。
var dateStr = "Tue Apr 04 2017 00:00:00 GMT+0530";
var dateEpoch = new Date(dateStr).getTime();
console.log(dateEpoch); // 1491244200000 (Local Time)Run Code Online (Sandbox Code Playgroud)
在接收端,他们必须再次将这个epoch time(UNIX 时间)转换成Date。它将给出从UI.
小智 2
Jindal saab,它会像这样工作。当我们使用日期选择器选择任何日期或仅传递任何值时,它会采用原始本地日期,但当我们进一步传递该值时,它会将其转换为 UTC,此后需要在接收端再次转换为本地区域。数据库以 UTC 格式保存日期时间。