0

日付が有効かどうかを確認する次のスクリプトがあります。

var text = '2/31/2013'; 
var comp = text.split('/'); 
var m = parseInt(comp[0], 10); 
var d = parseInt(comp[1], 10); 
var y = parseInt(comp[2], 10); 
var date = new Date(y,m-1,d); 
if(date.getFullYear() == y && date.getMonth() + 1 == m && date.getDate() == d) {
    console.log('Valid date'); 
}
else {
    console.log('Invalid date');
    var NextValidDate = new Date(y,m-1,d+1);
    console.log(NextValidDate);    
}

次の正しい日付にジャンプしたいと思います。サンプルケースでは、これは 01. March 2012 です。

しかし、それを取得する方法は?NextValidDate常に正しい日付を与えるとは限りません。

4

3 に答える 3

1
var originalDate = new Date(2013, 2, 31);
var nextDate = new Date(originalDate.getFullYear(), originalDate.getMonth(), originalDate.getDay() + 1);
于 2013-06-21T20:28:28.590 に答える
1

あなたの論理によれば、日付が存在しない場合 (入力として提供された日数よりも月の日数が少ない場合にのみ発生する可能性があります)、翌月の最初の日が次の「正しい」日付になります。

その場合、月に 1 を追加して次の有効な日付を作成し、日を次のように設定し1ます。

var NextValidDate = new Date(y, (m-1) + 1, 1);
于 2013-06-21T20:41:16.547 に答える
0

問題の一部は、ほとんどのブラウザーが(または)new Date(2013, 1, 31)として解釈することです。したがって、一方で:March 4, 20132/28/2013 + 3 days

date.getFullYear() == y && date.getMonth() + 1 == m && date.getDate() == d

を返しますfalseが、解析された日付は依然として技術的に有効な日付です。入力されたものが解析されm/d/yたものと同じでない場合、単に次の月に進みたいだけだと思います。m/d/yその場合は、nextValidDate翌月の最初の月を作成してください。

var text = '2/31/2013',
    comp = text.split('/'),
    m = parseInt(comp[0], 10),
    d = parseInt(comp[1], 10),
    y = parseInt(comp[2], 10),
    date = new Date(y, m - 1, d),
    nextValidDate;
if (date.getFullYear() === y && date.getMonth() + 1 === m && date.getDate() === d) {
    console.log('Valid date'); 
} else {
    console.log('Invalid date');
    nextValidDate = new Date(y, m, 1);
    console.log('Next valid date: ' + nextValidDate);
}
于 2013-06-21T20:48:14.993 に答える