Как мы получаем дату последней пятницы месяца, когда последний день месяца приходится на выходные? - PullRequest
1 голос
/ 06 апреля 2020

Как получить дату последней пятницы месяца, когда последний день месяца приходится на выходные, например, в мае 2020 года последняя пятница месяца - 29.

 Example input : may 2020

    output : may 29 2020 , since the last day of may which is 31 falls on weekend

        Example input : june 2020
output : june 30, 2020 , since the last day of june does not fall on weekend

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Моя ваниль javascript версия.

function getVen(_month, _year) {
	
  // Add 1 month for count down on current "_month"
  _year = _month == 12 ? _year + 1 : _year; 
  _month = _month == 12 ? 1 : _month + 1;
  
  // Set Date
	var d = new Date(_month + '/01/' + _year);
  // Remove 1 day
  d.setDate(d.getDate()-1); // Last day of "_month/_year"
  
  // If last day not Saturday nor Sunday
  if (d.getDay() != 6 && d.getDay() != 0) return d;
  
  // Count down looking for day "5"=Friday
	for (var i=7; i>0; i--) {
  	if (d.getDay() == 5) return d;
    d.setDate(d.getDate()-1);
  }
  
  return ''; // Not found ? 
}

document.getElementById('test').innerHTML = getVen(05,2020) + '<br/>';
document.getElementById('test').innerHTML += getVen(06,2020);
<div id="test"></div>
0 голосов
/ 06 апреля 2020

Рассчитайте номер дня с последнего дня месяца. Если пятница (dayno = 5) выпадает из 5, то вычтите на 5, иначе добавьте 2. Затем, наконец, вычтите дни с последнего дня месяца, если номер дня равен 0 или 6, иначе верните последний день месяца.

var calc = function(monthYear) {
    var lastDay = moment(monthYear, "MM-YYYY").endOf("month");
    var lastDayNumber = lastDay.day();
    var daystoSubtract;
    daystoSubtract =
        lastDay.day() >= 5 ?
        (daystoSubtract = lastDayNumber - 5) :
        (daystoSubtract = lastDayNumber + 2);
    if (lastDay.day() === 0 || lastDay.day() === 6) {
        return lastDay.subtract(daystoSubtract, "days");
    } else {
        return lastDay;
    }
};

console.log(calc("05-2020").format("DD-MM-YYYY"));
console.log(calc("06-2020").format("DD-MM-YYYY"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
...