Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.11.2014, 23:51
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

получение даты последней пятницы текущего месяца
Всем доброго времени суток.

Просьба к гуру подсказать, как наиболее правильно и быстро вычислить дату последней пятницы месяца...
Просмотрел вариации на тему, но в основном ищут, как вычислить день недели по дате... в итоге, есть пара мыслей..
к примеру:

// текущая дата (в скобках произвольная дата для теста)
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, 04.11.2014 в 01:50. Причина: исправление примера
Ответить с цитированием
  #2 (permalink)  
Старый 04.11.2014, 01:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Cache,

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)); //последняя пятница декабря
Ответить с цитированием
  #3 (permalink)  
Старый 04.11.2014, 02:26
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

рони, спасибо, хотя требовалось чуть попроще =) , видимо, я - не полностью описал ситуацию
в общем, переделал вот так:
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()); // последняя тяпница текущего месяца =)

Последний раз редактировалось Cache, 04.11.2014 в 02:30.
Ответить с цитированием
  #4 (permalink)  
Старый 04.11.2014, 07:33
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Можно ещё упростить:
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 но это не так наглядно.)
__________________
29375, 35

Последний раз редактировалось Aetae, 04.11.2014 в 07:46.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение даты и времени с сервера qwas2010 Javascript под браузер 0 19.05.2014 10:39
Получение текущей даты WORMrus Общие вопросы Javascript 2 02.03.2011 15:39