2017-04-10 9 views
0

私のプロジェクトでpersian-datepickerを使用していますが、に格納されている値はこのコンポーネントによって日付が選択されたときにはMon Apr 10 2017 00:00:00 GMT+0430 (Iran Daylight Time)ですが、 $http.postの場合、この値は2017-04-09T19:30:00.000Zに変換され、サーバー側のコードはこの値を昨日と解釈します。この状況で何をすればよいかわかりますか?私はこの動作によってかなり混乱しています。サーバで受け取ったAngularJSの日付が1日遅れです

+0

あなたのサーバは 'GMT'で、あなたのdatetimeをそれに変換しているようです。時間が表示されていれば、それはちょうど '4:30'未満です – tanmay

答えて

2

私は以前にpersian-datepickerを使用していませんでしたが、私はangular-ui-bootstrap datepickerでこの問題に直面しました。 angular-ui-bootstrap datepickerJavaScript Dateオブジェクトを使用して日付を計算します。したがって、日付はUTC datetime文字列にシリアル化されます。

あなたが行うことができますネイティブ angular-ui-bootstrap datepicker

ng-model-options="{timezone: 'utc'}" 

をタイムゾーン計算せずに日付ピッカーを取得するには。

このpersian-datepicker号によれば、ng-model-optionsもサポートされているようです。それがそうであるなら、あなたは試すことができます:

<input 
uib-datepicker-popup 
ng-model="modelValue" 
ng-model-options="{timezone: 'utc'}"> 

をアイデアを、このSimilar Questionを参照してください。

編集:上記はpersian-datepickerでサポートされていない場合は、この方法を試した後、手動で

を日付に変換します。あなたの日付は次のように次に、あなたが行うことができます例えば

var date = new Date(modelValue); 

日付オブジェクトmodelValueに変換した後 :

var formattedDate = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate(); 

を。これは、任意のconversion.Howeverなしであなたに'2017-4-10'のような日付を与えるだろう、 UTC変換を使用する場合は、次のようにします。

var formattedDate2 = date.getUTCFullYear() + '-' + (date.getUTCMonth() + 1) + '-' + date.getUTCDate(); 

Do thi日付をサーバーに送信する直前に、formattedDateまたはformattedDate2をサーバーに送信します。あなたが$http.postを起動する前に、次の操作をJSONにあなたの日付を変換するために、行われているようです - 得

JSON.stringify(date) 

:順番にサーバーに送信され2017-04-09T19:30:00.000Zことを。

+0

それはタイムゾーンがサポートされていないと問題が言っていると思います。 – Rachmaninoff

+0

答えを編集しました。確認してください。 –

関連する問題