2017-01-07 3 views
-2

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

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

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

+6

Можете ли вы показать, что вы пробовали до сих пор? Возможно, это просто нуждается в настройке. – Marc

+0

Каковы ближайшие выходные до среды? – RobG

ответ

1

Вы можете использовать встроенный конструктор 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 основе. См. here для получения дополнительной информации.

+0

Большое вам спасибо за помощь, но этот код показывает только субботу. Мне нужны суббота и воскресенье. –

+0

Я обновлю это. Но вы хотите его в обоих случаях или только в одном случае? – MasterBob

+0

На самом деле, единственное, что мне нужно - это суббота и воскресенье. –

0
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

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

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

Ниже немного более кратким, чем другие ответы:

/* 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 ') 
 
); 
 
}); 
 

Смежные вопросы