0

「Order」というエンティティがあり、「OrderDate」というプロパティがあります。ユーザーは、私が「今日にデフォルトで[受注日]を設定する新しい注文を作成するときに、HTMLクライアントでのデータ入力を簡略化するためにデフォルトのDateTimeOffsetをJavaScriptで設定する

partial void Orders_Validate(Order entity, EntitySetValidationResultsBuilder results) { 
    if(entity.OrderDate > DateTime.Today) 
      results.AddPropertyError(
       "Please specify a date that is not in the future", 
       entity.Details.Properties.OrderDate); 
} 

:サーバー上のセーブパイプラインでは私はこのような検証ロジックを持っています

myapp.Order.created = function (entity) { 
    entity.OrderDate = new Date(); 
    entity.OrderDate.setHours(0, 0, 0, 0); 
}; 

これは、サーバーとクライアントが同じタイムゾーンにある限り正常に動作します。

  1. でしょう、それは早朝のクライアントは、東アジアのどこかにある場合にも、この作品で、例えば:ここで

    は私の3つの質問です月曜日、サーバーはまだ米国にありますが、まだ日曜日ですか?

  2. プロパティ 'OrderDate'の正しいデータ型は何ですか?それはDateTimeOffsetでなければならないのでしょうか?
  3. タイプは

は、から

お祈り申し上げます

+0

通常、クライアントはサーバー時間を気にしません。タイムスタンプを使用して相互運用するだけです。 –

+0

私はあなたがサーバーのエラーに「あなたはtommorrowに」abutを与えるならば、それは人間を混乱させるでしょう、あなたがこれをチェックしたいときは時間を使います。 –

答えて

1

次のブログ記事を、助けに感謝JavaScriptで「受注日」プロパティを設定するための正しい方法は何かのDateTimeOffset、だった場合LightSwitchチームは、異なるタイムゾーンを扱うためのベストプラクティスに関する有用な背景を提供しています。

What Time Is It? Global Time (Steve Lasker)

これに基づき、あなたはのDateTimeOffsetとしてあなた受注日フィールドを定義したいと提案した例として、JavaScriptクライアント上で、それをデフォルト:

myapp.Order.created = function (entity) { 
    entity.OrderDate = new Date(); 
    entity.OrderDate.setHours(0, 0, 0, 0); 
}; 

次に、あなたがたDateTimeOffsetを使用しているとして、それがクライアントに保存する必要があります適切なタイムゾーンを持つ値は、オフセット、あなたの検証にアプローチの以下のタイプを実装することができます:

それは便利です念のために
partial void Orders_Validate(Order entity, EntitySetValidationResultsBuilder results) { 
    if (entity.OrderDate.Date > DateTimeOffset.Now.Date) { 
     var languages = HttpContext.Current.Request.UserLanguages; 
     // As the browser's language may not be set, 
     // the following falls back to the server's current culture info 
     var ci = languages != null && languages.Length > 0 ? 
      new System.Globalization.CultureInfo(languages[0]) : 
      System.Globalization.CultureInfo.CurrentCulture; 
     results.AddPropertyError(
      String.Format(
       "The date {0} is invalid, please specify a date that is not in the future", 
       entity.OrderDate.ToLocalTime().Date.ToString("d", ci)), 
      entity.Details.Properties.OrderDate); 
    } 
} 

は、上記の例では、ローカルタイムゾーンと特定の文化の中で検証メッセージの日付を表示します短い形式、ToLocalTimeを使用してユーザーのbrを取得する現在のHTTPリクエストを使用してowser言語に変換します。

+0

私は十分にあなたに感謝することはできません – user1533706

関連する問題