簡體   English   中英

角度材料的日期選擇器日期錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM