2013-10-27 5 views
0

Я использую следующий код javascript для отображения 7 дней в будущем на основе текущей даты.сделать Javascript будущей даты настроить для выходных

<script > 
<!-- 

var m_names = ["January", "February", "March", 
"April", "May", "June", "July", "August", "September", 
"October", "November", "December"]; 

var d_names = ["Sunday","Monday", "Tuesday", "Wednesday", 
"Thursday", "Friday", "Saturday"]; 

var myDate = new Date(); 
myDate.setDate(myDate.getDate()+7); 
var curr_date = myDate.getDate(); 
var curr_month = myDate.getMonth(); 
var curr_day = myDate.getDay(); 
document.write(d_names[curr_day] + "," + m_names[curr_month] + " " +curr_date); 

//--> 
</script> 

Я использую этот код javascript, чтобы сообщить своим клиентам, когда они получат свои пакеты.

Сценарий автоматически добавляет 7 дней к текущей дате. Я хотел бы, чтобы он скорректировал будущую дату (+7), если текущая дата выпадает на субботу или воскресенье.

Если текущая дата суббота, я бы хотел (а) добавить (+9 дней). Если текущая дата - воскресенье, я бы хотел ее добавить (+8 дней)

Все текущие дни, которые выпадают с понедельника по пятницу, я бы хотел (а) добавить (+7 дней).

Любые мысли о том, как это можно достичь?

+0

Сделайте «7» как «9» для всех дат, если выходные дни посередине. то есть, если текущий день - вторник, а количество дней больше, чем '6', то добавьте' 2'. –

ответ

1

После ответа CompuChip в (извините, C, он получил слишком долго комментарий!):

if (myDate.getDay() == 5) // Saturday 
    myDate.setDate(myDate.getDate()+9); 
else 
if (myDate.getDay() == 6) // Sunday 
    myDate.setDate(myDate.getDate()+8); 
else 
    myDate.setDate(myDate.getDate()+7); 

Здесь вы также можете использовать заявление switch (и если вы не знаете, как это сделать: это perfect момент, чтобы посмотреть его и поэкспериментировать с ним!).

Третьим интересным способом является использование массива. Теперь вы знаете, понедельник = 0, вторник = 1, и т.д., вы можете создать список значений-к-добавлять в любой день недели:

var nextWeek = [7, 7, 7, 7, 7, 9, 8]; 
myDate.setDate(myDate.getDate()+nextWeek[myDate.getDay()]); 

Однако, существует строгая связь между днем-недельное числом и отрегулировать значение:

myDate.setDate(myDate.getDate()+ ((myDate.getDay() < 5) ? 7 : 14-myDate.getDay())); 
+0

Спасибо, много. Первый метод лучше всего работал :) You Rock! – user1522879

+0

Без проблем Jongware. – CompuChip

+1

На самом деле небольшим улучшением может быть присвоение myDate.getDay переменной, поэтому вы можете предотвратить ее (вероятно, вычисляя?) 5 раз. – CompuChip

1

Вы можете использовать метод .getDay(), чтобы узнать день недели. Например

if (myDate.getDay() == 5) // Saturday 

Примечания дней начинаются с 0 на понедельник, 1 для вторника, и т.д.

+0

Спасибо за помощь, однако, к сожалению, я не очень хорош, когда дело доходит до javascript. У меня нет подсказки, как вставить это. – user1522879

0

Это довольно просто на самом деле:

var days = 24 * 60 * 60 * 1000; 

function getFutureDate(date) { 
    switch (date.getDay()) { 
    case 0: return new Date(date.getTime() + 8 * days); 
    case 6: return new Date(date.getTime() + 9 * days); 
    default: return new Date(date.getTime() + 7 * days); 
    } 
} 

Теперь вы можете использовать getFutureDate следующим образом:

var futureDate = getFutureDate(new Date); 

Однако мы можем написать еще более общее решение:

var milliseconds = 1 
    , seconds  = 1000 * milliseconds 
    , minutes  = 60 * seconds 
    , hours  = 60 * minutes 
    , days   = 24 * hours 
    , weeks  = 7 * days; 

function addDate(date, time) { 
    return new Date(date.getTime() + time); 
} 

Теперь мы можем переписать нашу getFutureDate функцию следующим образом:

function getFutureDate(date) { 
    switch (date.getDay()) { 
    case 0: return addDate(date, 1 * weeks + 1 * days); 
    case 6: return addDate(date, 1 * weeks + 2 * days); 
    default: return addDate(date, 1 * weeks + 0 * days); 
    } 
} 

Конечно, в этом случае было бы лучше просто используйте старую функцию getFutureDate. Однако я просто хотел показать вам, как вы можете добавить (или вычесть) произвольное количество времени из ваших дат.

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