Как получить первый день предыдущей недели из объекта даты в JavaScript?
Заданный объект даты, как получить первый день предыдущей недели
6 ответов
Эта библиотека Datejs выглядит так, как будто она может делать такие вещи относительно легко.
Код:
function getPreviousSunday()
{
var today=new Date();
return new Date().setDate(today.getDate()-today.getDay()-7);
}
function getPreviousMonday()
{
var today=new Date();
if(today.getDay() != 0)
return new Date().setDate(today.getDate()-7-6);
else
return new Date().setDate(today.getDate()-today.getDay()-6);
}
Обоснование:
Зависит от того, что вы подразумеваете под первым днем предыдущей недели. Я предполагаю, что вы имеете в виду предыдущее воскресенье ради этой дискуссии.
Чтобы найти количество дней для вычитания:
- Получить текущий день недели.
- Если текущий день недели - воскресенье, вы вычитаете 7 дней.
- Если текущий день понедельник, вы вычтите 8 дней
...
- Если текущий день суббота 13 дней
Фактический код после определения количества дней для вычитания очень прост:
var previous_first_day_of_week=new Date().setDate(today.getDate()-X);
Где X - обсуждаемое выше значение Это значение сегодня. GetDay() + 7
Если к первому дню недели вы имели в виду что-то другое, вы должны быть в состоянии вывести ответ из вышеуказанных шагов.
Примечание: допустимо передавать отрицательные значения в функцию setDate, и она будет работать правильно.
Для кода около понедельника. У вас есть особый случай, потому что getDay() заказывает воскресенье до понедельника. Таким образом, мы в основном заменим getDay() в этом случае значением субботнего значения getDay() + 1, чтобы переупорядочить воскресенье до конца недели.
Мы используем значение 6 для вычитания с понедельником, потому что getDay() возвращает 1 выше для каждого дня, чем мы хотим.
function previousWeekSunday(d) {
return new Date(d.getFullYear(), d.getMonth(), d.getDate() - d.getDay() - 7);
}
function previousWeekMonday(d) {
if(!d.getDay())
return new Date(d.getFullYear(), d.getMonth(), d.getDate() - 13);
return new Date(d.getFullYear(), d.getMonth(), d.getDate() - d.getDay() - 6);
}
Я не совсем понял посты других людей. Вот javascript, который я использую для отображения недели Sun-Sat по отношению к данному дню. Так, например, чтобы получить "на прошлой неделе", вы проверяете, как были стойки ворот Sun/Sat относительно семи дней назад: new Date()-7
// variables
var comparedate = new Date()-7; // a week ago
var dayofweek = comparedate.getDay();
// just for declaration
var lastdate;
var firstadate;
// functions
function formatDate (dateinput) // makes date "mm/dd/yyyy" string
{
var month = dateinput.getMonth()+1;
if( month < 10 ) { month = '0' + month }
var date = dateinput.getDate();
if( date < 10 ) { var date = '0' + date }
var dateoutput = month + '/' + date + '/' + dateinput.getFullYear();
return dateoutput;
}
// Sunday to Saturday ... Sunday is the firstdate, Saturday is the lastdate
// (modify this block if you want something different eg: Monday to Sunday)
if ( dayofweek == 6 ) { lastdate = comparedate; firstdate = comparedate-6; } // Saturday
else if ( dayofweek == 0 ) { lastdate = comparedate+6; firstdate = comparedate; } // Sunday
else if ( dayofweek == 1 ) { lastdate = comparedate+5; firstdate = comparedate-1; } // Monday
else if ( dayofweek == 2 ) { lastdate = comparedate+4; firstdate = comparedate-2; } // Tuesday
else if ( dayofweek == 3 ) { lastdate = comparedate+3; firstdate = comparedate-3; } // Wednesday
else if ( dayofweek == 4 ) { lastdate = comparedate+2; firstdate = comparedate-4; } // Thursday
else if ( dayofweek == 5 ) { lastdate = comparedate+1; firstdate = comparedate-5; } // Friday
// Finish
var outputtowebpage = formatDate(firstdate) + ' - ' + formatDate(lastdate);
document.write(outputtowebpage);
Я должен искать это каждый раз, когда мне нужно это сделать. Итак, я надеюсь, что это полезно для других.
Первым днем недели может быть воскресенье или понедельник, в зависимости от того, в какой стране вы находитесь:
function getPrevSunday(a) {
return new Date(a.getTime() - ( (7+a.getDay())*24*60*60*1000 ));
};
function getPrevMonday(a) {
return new Date(a.getTime() - ( (6+(a.getDay()||7))*24*60*60*1000 ));
};
Если вы хотите установить дату в предыдущем воскресенье, вы можете использовать:
a.setDate(a.getDate()-7-a.getDay());
и за предыдущий понедельник:
a.setDate(a.getDate()-6-(a.getDay()||7));
В других примерах у вас будет проблема, когда воскресенье выпадает на другой месяц. Это должно решить проблему:
var today, todayNumber, previousWeek, week, mondayNumber, monday;
today = new Date();
todayNumber = today.getDay();
previousWeek = -1; //For every week you want to go back the past fill in a lower number.
week = previousWeek * 7;
mondayNumber = 1 - todayNumber + week;
monday = new Date(today.getFullYear(), today.getMonth(), today.getDate()+mondayNumber);