[英]Wrong date with angular material's date picker
我使用 datepicker 選擇一個日期並將其發送到服務器。
當我記錄 JS 值時,我得到了正確的結果:
Tue Mar 22 2016 00:00:00 GMT+0100 (Mitteleuropäische Zeit)
但在 ajax 請求中是
2016-03-21T23:00:00.000Z
我不修改值,只是將對象提供給 angulars http 函數。
Angular 是否需要一些配置來處理它?
你可以試試下面的一段代碼
dateObj.setMinutes((dateObj.getMinutes() + dateObj.getTimezoneOffset()));
無需本地化,在進行任何服務調用之前使用此代碼。 它會將您在日期選擇器中選擇的確切日期傳遞給您。
它適用於所有時區 (+) 和 (-),
示例: 2016-03-21 00:00:00 GMT+0100
,上述代碼將其轉換為2016-03-21 01:00:00 GMT+0000
。 在服務期間,它將其轉換為2016-03-21 00:00:00
。
我認為它會解決你的問題。
這兩個字符串代表同一時間。 一種是UTC,即GMT+0,從Z
結尾可以看出。 另一個位於不同的時區,特別是 GMT +1 小時。
如果您有兩個字符串的 javascript 日期對象,並將它們轉換為整數,即自 1970 年 1 月 1 日,UTC 以來經過的秒數,您會發現它們是相同的。 它們代表同一時刻但位於兩個不同的地理位置。
var d1 = new Date('Tue Mar 22 2016 00:00:00 GMT+0100');
var d2 = new Date('2016-03-21T23:00:00.000Z');
Number(d1); // 1458601200000
Number(d2); // 1458601200000
一般來說,這是一件好事。 處理時區變得非常混亂。 我發現最好讓服務器始終處理 UTC。
https://github.com/angular/material/pull/9410
查看 1.1.1+ 版本。 這將解決您的問題。
<md-datepicker ng-model="date" ng-model-options="{ timezone: 'utc' }"></md-datepicker>
如果假設我選擇了一個像Tue Aug 06 2019 00:00:00 GMT+0530 (India Standard Time)
,
我得到2019-08-05T18:30:00.000Z
。 (在我的情況下,相對於所選日期的前一個日期)
我使用toLocalDateString()來完成這項工作。
// this.date = 2019-08-05T18:30:00.000Z
const converted = new Date(this.date).toLocaleDateString();
console.log(converted); // 8/6/2019 (MM/DD/YYYY) format
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.