10

DateTime.Parse を使用して文字列をフォーム ポストから DateTime に変換する .NET の DefaultModelBinder で動作するバリデータを構築しようとしています。日付がサーバーに投稿されて、それが悪い日付であることに気付くまで待つ必要はありません。

現在、jquery.validate は次のコードを使用して日付フィールドを検証します。

// http://docs.jquery.com/Plugins/Validation/Methods/date
date: function(value, element) {
    return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
}

ただし、Javascript のひどい Date パーサーにより、次のようになります。

275481/69/100089

275760 年 9 月 12 日まで有効と評価されます。

一方、これは:

2013 年 11 月 19 日

無効と評価されます。

もちろん、C# の DateTime.Parse() はカルチャ (ローカリゼーション) やうるう年などを考慮に入れていることを理解しており、固定 (米国) カルチャを想定して、クライアントで "02-29-2013" を許可しても問題ありません。サーバーでそれを追い出します(理想的にはそうではありませんが、許容できます)。

しかし、C# の DateTime.Parse() ロジックで動作する、より優れた日付バリデーターを誰かがまとめていないなんて信じられません。

誰かが持っているかもしれませんが、私は見つけられなかったので、ここに投稿しています。

信じられないほど単純な (精度が低い) ものから信じられないほど複雑な (精度が高い) まで、これにはいくつかの方法があることはわかっていますが、誰かがすでにこの道をたどり、スイート スポットを見つけていることを願っています。

4

4 に答える 4

5

Datejsはかなり堅牢に思えます。その解析機能は 150 を超えるカルチャをサポートしています。

Date.parse("February 20th 1973")

また、現在のカルチャでは無効な日付文字列を解析する必要がある場合は、parseExact関数を使用できます。

// The Date of 15-Oct-2004
Date.parseExact("10/15/2004", ["M/d/yyyy", "MMMM d, yyyy"]);
于 2012-11-19T22:07:58.403 に答える
3

正直なところ、最善の策は AJAX ヒットを実行し、ASP.net Web サーバーに文字列を解析して Javascript の日付を返すように依頼することです。

Javascript ライブラリは、さまざまなロケールと簡単に混同されます。たとえば、次のようになります。

GET /ParseDate.ashx?dateStaring=06/01/34 4:53:05 غ.و&locale=ar-SA

次の理由により、これは非常に複雑になります。

"6/1/34" = November 19, 2012

Windows を背後に持つ .NET フレームワークは、さまざまなロケールをサポートしています。

于 2012-11-19T21:56:19.590 に答える
1

同様の検証と解析を行う 2 つの Datetime 実装 (1 つは JS 用、もう 1 つは C# 用) を見つけようとする代わりに、クライアントに 1) 独自のライブラリを使用して日付を検証し、2) 日付を解析して形式を変更することを検討しましたか? C# フレンドリーな形式?

これにより、DateJSを使用して日付入力用の非常に柔軟なフロント エンドを取得し、クライアント側のカルチャを処理しやすくし、サーバー側で固定形式を処理できるようになります。

于 2012-11-19T21:55:14.483 に答える
0

文字列をコンストラクターに渡そうとしましたか?

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Dateのサンプルを次に示します。

var birthday = new Date("December 17, 1995 03:24:00");
于 2012-11-19T21:48:45.560 に答える