使用 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)
所以,我只是意识到其他答案的问题是我的问题是错误的。我首先想要的是检查某一天是否是五月的最后一个星期一(或任何其他月份)。不是如何得到五月的最后一个星期一。对于那个很抱歉。
我相信我自己的问题的最佳答案是这个:
function lastMondayOfMay() {
var d = new Date(2013, 5, 0); //last day of desired month
return d.getDate() - (d.getDay() - 1);//1 here represents monday
}
对于其他月份,只需创建指向所需月份最后一天的日期。
感谢大家努力回答这个问题。但我的问题仍然存在:这是了解给定日期是否是本月最后一个星期一的最佳方法。使用我的解决方案和他们比较日期是我目前正在做的事情。有没有更直接的方法?
我相信这也将回答我的第二个问题:
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
我实际上正在测试更多的日期,它们似乎很好。任何人都可以提出我的代码将失败的情况吗?
好的,我也将回答第三个问题。唯一可能发生这种情况的月份是二月。这是因为如果我的测试不及格,最后一个星期一应该在 24 日之前发生。由于我只担心可能(我用它来计算阵亡将士纪念日假期),我相信我的解决方案会做。
发布我的解决方案。如果最后一天是星期天,我发现另一个解决方案有一些问题(它返回 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
}
在没有 momentjs 的情况下使用 javascript。
/**
* @param {number} month - From 0 to 11.
* @param {number} year
*/
function lastMondayOfMonth(month, year) {
var WEEK_DAYS = 7;
var DAY_OF_WEEK = 1; // 1 for monday
var day;
var lastDateOfMonth = new Date(year, (month + 1), 0);
var lastDay = lastDateOfMonth.getDate();
var lastWeekDay = lastDateOfMonth.getDay();
if (lastWeekDay === DAY_OF_WEEK) {
day = lastDay;
} else if (lastWeekDay < DAY_OF_WEEK) {
day = lastDay - (WEEK_DAYS - DAY_OF_WEEK);
} else {
day = lastDay - (lastWeekDay) + DAY_OF_WEEK;
}
return day;
}