日付ピッカーを使用して日付を選択し、サーバーに送信します。
JS値をログに記録すると、正しい結果が得られます。
Tue Mar 22 2016 00:00:00 GMT+0100 (Mitteleuropäische Zeit)
しかし、ajaxリクエストではそれは
2016-03-21T23:00:00.000Z
値を変更するのではなく、オブジェクトにangulars http関数を与えるだけです。
Angularそれを処理するためにいくつかの設定が必要ですか?
これら2つの文字列は同じ時間を表します。 1つはUTC、つまりGMT +0であり、Z
の末尾から確認できます。もう1つは異なるタイムゾーン、具体的にはGMT +1時間です。
両方の文字列のJavaScript日付オブジェクトがあり、それらを整数に変換した場合、つまり1970年1月1日からの経過秒数(UTC)の場合、それらは同一であることがわかります。それらは同じインスタントを表しますが、2つの異なる地理的位置で表します。
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で処理するのが最善の方法です。
次のコードを試すことができます
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
に変換します。
それはあなたの問題を解決すると思います。
https://github.com/angular/material/pull/941
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