Я много думал - я пытался, но я не мог решить это. Мне нужно приложение JavaScript, которое показывает ближайшие даты выходных в текущей дате.

Если сейчас выходные, укажите даты этих выходных, если нет, то даты следующих выходных.

Я жду вашей помощи. Уважает .

-2
mork orson 7 Янв 2017 в 23:12

3 ответа

Лучший ответ

Вы можете использовать встроенный конструктор Date.

var date = new Date();
var day = date.getDay();
var saturday;
var sunday;
if(day === 0 || day === 6){ //0 for Sunday, 6 for Saturday
    saturday = date;
    sunday = new Date(saturday.getTime());
    sunday.setDate(saturday.getDate() + (day === 0 ? -1 : 1));
    if(day === 0){
        var temp = saturday;
        saturday = sunday; //Confusing, but they are actually the wrong dates, so we are switching the dates
        sunday = temp;
        temp = null; //Free up some memory!
    }
        
}
else{
    //This is the complicated part, we need to find when is the next Saturday
    saturday = new Date(date.getFullYear(), date.getMonth(), (date.getDate() + 6) - day);
    sunday = new Date(saturday.getTime());
    sunday.setDate(saturday.getDate() + (saturday.getDay() === 0 ? -1 : 1));
}
date = day = null; //Free up some memory!
document.body.innerText = [saturday, sunday];

Чтобы получить дату, используйте saturday.getDate() или sunday.getDate(). Помните, что Date месяцев основаны на 0. См. здесь для получения дополнительной информации.

1
MasterBob 7 Янв 2017 в 22:46
 var chosenDay = new Date();
    var box = [];
    var counting = 0;
    for (var i = 0; i < 7; i++) {
      chosenDay.setDate(chosenDay.getDate() + counting);
      var day = chosenDay.getDate();
      var dayy = chosenDay.getDay();
      var month = chosenDay.getMonth()+1;
      var year = chosenDay.getFullYear();
      box.push({day: day, dayy: dayy});
      counting = 1;
    };

Теперь, чтобы найти субботу и воскресенье

box.map(function(obj) {
 if (obj.dayy === 6) {
  console.log('Saturday found');
  alert(obj.day);
}; 
 if (obj.dayy === 0) {
  console.log('Sunday found');
  alert(obj.day);
};
});
0
Olli 7 Янв 2017 в 20:56

Я интерпретирую «ближайшие» выходные как предыдущие выходные в понедельник и вторник и следующие выходные в четверг и пятницу. Вы не предоставили никакой информации о том, что делать со средой.

Однако из других ответов кажется, что вы хотите либо текущие выходные для субботы и воскресенья, либо следующие выходные для рабочих дней.

Следующее является немного более кратким, чем другие ответы:

/* Get nearest weekend to the provided date
** @param {Date} date - date to get weekends nearst to
** @returns {Array} array of Dates [Saturday, Sunday]
*/
function getNearestWeekend(date) {
  // Copy date so don't mess with provided date
  var d = new Date(+date);
  // If weekday, move d to next Saturday else to current weekend Saturday
  if (d.getDay() % 6) {
    d.setDate(d.getDate() + 6 - d.getDay());
  } else {
    d.setDate(d.getDate() - (d.getDay()? 0 : 1));
  }
  // Return array with Dates for Saturday, Sunday
  return [new Date(d), new Date(d.setDate(d.getDate() + 1))]
}

// Some tests
[new Date(2017,0,7),  // Sat 7 Jan
 new Date(2017,0,8),  // Sun 8 Jan
 new Date(2017,0,9),  // Mon 9 Jan
 new Date(2017,0,12)  // Thu 12 Jan
].forEach(function(d) {
  var opts = {weekday:'short', day:'numeric', month:'short'};
  console.log('Date: ' + d.toLocaleString('en-GB',opts) + ' | Next weekend: ' +
              getNearestWeekend(d).map(d =>d.toLocaleString('en-GB',opts)).join(' and ')
  );
});
 
0
RobG 7 Янв 2017 в 23:04