JavaScriptを使用して、5月の最後の月曜日を取得する最良の方法はどれですか? 月の最後の日を取得できることを知っており、希望する日までの日数の差を差し引きます。しかし、それを行うための短くてエレガントで効率的な方法はありますか?
ありがとう
JavaScriptを使用して、5月の最後の月曜日を取得する最良の方法はどれですか? 月の最後の日を取得できることを知っており、希望する日までの日数の差を差し引きます。しかし、それを行うための短くてエレガントで効率的な方法はありますか?
ありがとう
function getLastMonday(month, year) {
var d = new Date();
if (year) { d.setFullYear(year); }
d.setDate(1); // Roll to the first day of ...
d.setMonth(month || d.getMonth() + 1); // ... the next month.
do { // Roll the days backwards until Monday.
d.setDate(d.getDate() - 1);
} while (d.getDay() !== 1);
return d;
}
getLastMonday(); // => Mon Mar 25 2013 12:44:39 GMT-0600 (MDT)
getLastMonday(5); // => Mon May 27 2013 12:41:52 GMT-0600 (MDT)
getLastMonday(1, 2000); // => Mon Jan 31 2000 12:43:15 GMT-0700 (MST)
私のソリューションを投稿します。最後の日が日曜日の場合、他のソリューションには問題があることがわかりました (最後の月曜日の日付として 32 が返されました - 2015 年 5 月 31 日日曜日を参照してください。
function lastMondayOfMay(year, month) {
var d = new Date(year, month, 0); //last day of desired month
if (d.getDay() == 0) {
//deals with sunday - subtracts 6 instead of adding 1
return d.getDate() - 6;
} else {
return d.getDate() - (d.getDay() - 1);
}
return d.getDate() - (d.getDay() - 1);//1 here represents monday
}
したがって、他の回答の問題は、私の質問が間違っていることです。私が最初に望んでいたのは、特定の日が 5 月 (または他の月) の最後の月曜日であるかどうかを確認することでした。5月の最後の月曜日を取得する方法ではありません。申し訳ありません。
私が信じている私自身の質問に対する最良の答えはこれです:
function lastMondayOfMay() {
var d = new Date(2013, 5, 0); //last day of desired month
return d.getDate() - (d.getDay() - 1);//1 here represents monday
}
他の月については、必要な月の最終日を指す日付を作成するだけです。
これに答えようとする皆さんの努力に感謝します。しかし、私の質問はまだ残っています: 特定の日付が月の最後の月曜日かどうかを知る最良の方法はどれですか? 私のソリューションを使用して日付を比較することは、私が現在行っていることです。それを行うより直接的な方法はありますか?
これで2番目の質問にも答えられると思います:
function isLastMonday(date) {//date format: 'DD/MM/YYYY'
var d = new Date(date);
return d.getDay() === 1 && (d.getDate() + 7) > 30; //1 here represents monday
}
isLastMonday('05/27/2013');//true
isLastMonday('05/26/2013');//false
isLastMonday('02/25/2013');//true
isLastMonday('03/24/2013');//false
私は実際にはもっと多くの日付でテストしていますが、問題ないようです。私のコードが失敗するシナリオを誰かが思いつくことができますか?
わかりました、この 3 番目の質問にもお答えします。これが起こる唯一の月は2月です。これは、テストに失敗するには、最後の月曜日が 24 日より前になる必要があるためです。私は 5 月のことしか心配していないので (メモリアル デーの休日を計算するために使用しています)、私の解決策で十分だと思います。