получение даты последней пятницы текущего месяца
Всем доброго времени суток.
Просьба к гуру подсказать, как наиболее правильно и быстро вычислить дату последней пятницы месяца... Просмотрел вариации на тему, но в основном ищут, как вычислить день недели по дате... в итоге, есть пара мыслей.. к примеру: // текущая дата (в скобках произвольная дата для теста) var d = new Date(2015, 0, 29); // кол-во дней в след месяце var dayCount = new Date(d.getFullYear(), d.getMonth() + 2, 0).getDate(); alert('кол-во дней в след месяце: ' +dayCount); d.setDate( d.getDate()+dayCount ); d.setDate(0); // for test alert('последний день текущего месяца: '+ d + '\n'+'является днем недели: '+ d.getDay() +' или '+ ['вс','пн','вт','ср','чт','пт','сб'][d.getDay()] ); var daySearch = d.getDate(); if(d.getDay() < 5){ daySearch = d.getDate() - (7 + d.getDay() - 5); alert(daySearch +' = '+ d.getDate() +' - (7 + '+ d.getDay() +' - 5);') }else if(d.getDay() > 5){ daySearch = d.getDate() - (d.getDay() - 5); alert(daySearch +' = '+ d.getDate() +' - ('+ d.getDay() +' - 5);') }; alert('Число последней пятницы текущего месяца: '+daySearch); |
Cache,
:write: function getFri(year, month, date) { var d = new Date(year, date ? month - 1 : month, date ? date : 0); d.setDate(d.getDate() + [-2, -3, -4, -5, -6, 0, -1][d.getDay()]) return d } alert(getFri(2014, 11, 4)); //прошлая пятница alert(getFri(2014, 11)); //последняя пятница ноября alert(getFri(2014, 12)); //последняя пятница декабря |
рони, спасибо, хотя требовалось чуть попроще =) , видимо, я - не полностью описал ситуацию
в общем, переделал вот так: function getFri() { var d = new Date((new Date).getFullYear(), (new Date).getMonth() + 1, 0); d.setDate(d.getDate() + [-2, -3, -4, -5, -6, 0, -1][d.getDay()]); return d.getDate(); } alert(getFri()); // последняя тяпница текущего месяца =) |
Можно ещё упростить:
function getFri(date) { if(!date) date = new Date; date.setMonth(date.getMonth() + 1, 0); return date.getDate() + [-2, -3, -4, -5, -6, 0, -1][date.getDay()]; } alert(getFri()); [-2, -3, -4, -5, -6, 0, -1][date.getDay()] можно ещё заменить на -(date.getDay() + 2)%7 но это не так наглядно.) |
Часовой пояс GMT +3, время: 23:05. |