я интерпретирую «ближайший» уик-энд как предыдущий уик-энд в понедельник и во вторник, и в следующие выходные в четверг и пятницу. Вы не представили никакой информации о том, что делать со средой.
Однако, по другим ответам, кажется, вы хотите либо выходные дни в субботу и воскресенье, либо в следующие выходные для будних дней.
Ниже немного более кратким, чем другие ответы:
/* 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 ')
);
});
Можете ли вы показать, что вы пробовали до сих пор? Возможно, это просто нуждается в настройке. – Marc
Каковы ближайшие выходные до среды? – RobG