 
			
				03.11.2014, 23:51
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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.
				Причина: исправление примера
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				04.11.2014, 01:19
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		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)); //последняя пятница декабря
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				04.11.2014, 02:26
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				04.11.2014, 07:33
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Тлен 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.01.2010 
					
					
					
						Сообщений: 6,601
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Можно ещё упростить: 
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.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |