2017-10-26 7 views
1

AngularjsとWebAPIの間で日付を処理する方法について、実際の混乱がありました。私たちは日付だけを気にし、時間や時間帯は気にしません。角度のあるサイトは、日付オブジェクトを私たちのAPIにポストしますが、日付オブジェクトにはタイムゾーンがあります。そのため、ユーザーの場所によっては、保存される日付が1日ずれています。日付、Angularjs、WebAPI

私は、これらの日付を1つずつベースに処理する必要はないので、すべてのフォームフィールドをループしているすべてのputおよび投稿に対してhttpインターセプタを置き、日付からタイムゾーンを取り除いて日付を返すだけですこれは正しいとは思わない。

これを処理する最善の方法についてのご意見はありますか?

UPDATE:

詳細それは場合に役立ちます。剣道の日付ピッカーを使用し、k-ng-modelでモデル値を設定しています。これは、有効なDateオブジェクトを取得するのに役立ちます。今日、私はインターセプターを削除し、以下を追加しました:APIに送り返されたときに

   kendo.ui.DatePicker.prototype.valueOld = kendo.ui.DatePicker.prototype.value; 
      kendo.ui.DatePicker.prototype.value = function (e) { 
       var val = this._value; 
       if (val != null) { 
        this._value = moment(val).format("YYYY-MM-DD"); 
       } 
       return this.valueOld(e); 
      } 

ユーザーが日付を変更したときに今のモデルの値は日付のみとタイムゾーンになりますが、無視されます。

config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
      new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd" }); 

私たちの開発者が個別に日付を処理する必要はありません:日付はフロントエンドに送信されているAPIで

我々としても、タイムゾーンを取り除きフォーマッタを持っています。私たちはもともとこれをやっていて、コードに一貫性はありませんでした。

+1

UTCの日付を使用する必要があります。日付をUTCに変換せずにタイムゾーンを削除すると、さらに多くのバグが発生する可能性があります。 – nicooga

+0

あなたはそれを思い描いています。すべてをUTCし、時間を無視する。 –

答えて

2

日時をUTCとして送受信します。 Web APIでは、DateTimeインスタンスのプロパティがKindDateTimeKind.Utcに設定されていると仮定すると、送信されたすべてがUTCとして送信されるように、これを追加できます。 angularjsから

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // add this to whatever code you have now 
     config.SetTimeZoneInfo(TimeZoneInfo.Utc); 
    } 

UTC yyyy-MM-ddTHH:mm:ss.fffffZとしてISO8601形式で日付を送信します。次に、日付を表示するために使用するUIコントロールの時間部分だけを心配する必要があります。

+1

彼のapiは、与えられたフィールドが 'TimeMoment'である' DateTime'ではなく 'Day'(' Time Range')であると予想しているので、Jonのケースは混乱していると思います。私たちは間違っている「Day」を表現するために 'Moment'を使うべきですか、' Time Range'である 'Day'を表現する2つの' Moments'を使うべきでしょうか?とにかく、日付は通常、私が使っている言語が何であれ混乱する実装をしますが、議論の価値があります。 –