我的應用程序(C#中的後端#& Angular Materials中的前端)有一個搜索屏幕,允許用戶使用datepickers指定日期時間段。問題是有些用戶不在英國,而他們查看的所有數據都是用GMT日期創建的。所以如果德國的某個人在datepicker中選擇日期01/01/2017,那麼我的後端將其讀爲2016年12月31日23:00:00,導致搜索結果不正確。 有人可以告訴我如何處理這個?我想仍然使用Angular Material datepicker,但要確保我傳遞了用戶選擇的日期。我知道我可以在發佈日期之前改變日期,如下所示: moment(myDate).format('MM/DD/YYYY'))
但我有很多這樣的情況,而且更喜歡一些通用的解決方案。在C中處理js本地化日期#
回答
對於傳輸和存儲,我建議使用UTC的一切。只有在顯示點時,時間才能轉換爲用戶選擇的任何區域設置。儘管這是一個老問題,但遇到時間轉換問題仍然很常見。我工作過的大多數地方都會將UTC時間戳或Unix紀元時間存儲爲UTC,這樣毫無疑問系統中任何地方的含義都是一樣的。如果/當它需要渲染到本地時,我們會在客戶端執行。
例如,爲了得到轉換爲UTC作爲一個字符串本地時間:
var noTimeZone = new Date().toUTCString();
- 或 -
var noTimeZone = new Date().toISOString();
或者,如果你想有一個數值,所以你不必處理客戶機/服務器之間質樸的格式解析,就可以得到Unix紀元:
var unixEpochMS = new Date().getTime();
提個醒,Date.getTime()將返回毫秒而不是秒。另請注意,Unix紀元是根據UTC定義的。也就是說,任何時間戳的數字值都是UTC。如果您需要不同的時區,則需要解析該值,然後將時區設置爲所需的時區。
解決方案1: 我認爲解決方案是獲取用戶的時區。您可以使用Javascript從用戶計算機獲取時區,並將其發送到服務器並提出請求。
var d = new Date();
var tz = d.getTimezoneOffset()/-60;
tz
將2
如果用戶的時區是通用汽車+ 2
Soution 2: 您發送和接收Unix時間戳。但是,您需要根據用戶的時區將時間戳轉換爲可讀的日期/時間。
正如我上面提到的,我已經有了臨時解決方案,因爲我可以使用moment(myDate).format('MM/DD/YYYY')將日期作爲格式化字符串傳遞。這種方式當用戶選擇例如Sat Oct 01 2016 00:00:00 GMT + 0100(格林威治標準時間夏令時)在後端我仍然有正確的日期10/01/2016,但我正在尋找一些通用的解決方案。 – johnblack
- 1. 如何在python中本地化日期?
- 2. 如何在knockout.js中處理本地化?
- 3. 獲取本地化日期
- 4. 安卓日期本地化
- 5. Javascript日期本地化
- 6. 本地化和日期
- 7. Java日期本地化
- 8. 在PHP中處理日期
- 9. 在Java中處理日期
- 10. 在MySQL中處理日期?
- 11. 在mysql中處理日期?
- 12. 在Hadoop中處理日期
- 13. 如何處理Gatsby JS的國際化/本地化?
- 14. 處理d3.js軸上的日期
- 15. java日期是否處理本地化(選擇Calendar日曆的原因之一)?
- 16. 如何在C#中獲取日期,無需本地化
- 17. ASP MVC - 使用時區和文化處理日期時間本地化
- 18. 本地化日期在asp.net以不同的本地化
- 19. 在C中進行貨幣本地化和處理#
- 20. Laravel中的日期本地化
- 21. Java中的本地化日期格式
- 22. iphone中的日期本地化
- 23. 在瀏覽器上本地化日期?
- 24. 如何處理播放中的MultiTimeZone和本地時間/日期
- 25. 在nvd3.js中格式化日期
- 26. 在本地化期間管理空間
- 27. 本地化js沒有在響應應用程序中翻譯日期
- 28. 當本地日期格式不同時處理mySQL日期格式
- 29. C#datetime.tryparse可以處理錯誤日期
- 30. 在Windows 7批處理作業中格式化日期
我的代碼是查詢舊的遺留系統,所以我不能改變日期保存的方式。他們都是這樣的:2013-01-26 11:32:33.070。 – johnblack
如果我正確理解您的帖子,則所有數據均以GMT時間存儲。如果是這樣的話,只需在javascript中獲取用戶輸入的UTC時間即可。爲了解決您的問題,GMT和UTC是同義詞。 – jropella
是的,這是正確的,這是我上面提到的解決方案。今天經過幾次測試後,看起來它是解決這個問題的唯一方法。除非有一種方法,我不知道強迫javascript忽略時區,並且在使用Date對象時總是創建UTC/GMT日期。 – johnblack