1

日付入力用に、日、月、年の 3 つのフィールドがあります。入力したら、確認する必要があります。次のコードが使用されます。

$('#test').click(function(event) {
    var daySelector = "#dd",
        monthSelector = "#mm",
        yearSelector = "#yyyy";
    var day = $(daySelector).val() == "" ? 1 : parseInt($(daySelector).val(), 10);
    var month = $(monthSelector).val() == "" ? 1 : parseInt($(monthSelector).val(), 10);
    var year = parseInt($(yearSelector).val(), 10);
    var date = new Date(year, month, day);
    var result = !isNaN(date.getTime());    
});

trueしかし、 33/55/2000 のような間違った値を受け入れます (つまり、返します)。私の間違いはどこですか? デモ

別のアプローチを試しましたが、うまくいきません。

4

2 に答える 2

2

Date オブジェクトは、オーバーフローを自動的に変換します。

したがって、32.01.2000 を作成し、1 月に 31 日しかない場合、01.02.2000 の日付のオブジェクトが作成されます。

検証ロジックを「Is Nan」からより洗練されたものに変更する必要があります;)

注意すべきことが1つあります:)

date.getMonth() は 0-11 を返します -> 0 は 1 月に等しい :P それが私の最初の答えの間違いの原因でした。そして、 Date コンストラクターに送信される値を減らす必要があるようです。

于 2012-04-09T20:22:07.057 に答える
0

既存のソリューションを検討してください。

=========

UPDは、これらのフレームワークの 1 つから関数を取り出しました。

validateDay = function (day, year, month) {
    var date = new Date(year, month, day);
    return (date.getFullYear() === year &&
        date.getMonth() === month &&
        date.getDate() === day);
};​
于 2012-04-09T20:18:07.947 に答える