учитывая объект даты, как получить первый день предыдущей недели
Как мне получить первый день предыдущей недели из объекта даты в 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 () в этом случае на значение субботы + 1 getDay (), чтобы изменить порядок воскресенья до конца недели.
Мы используем значение 6 для вычитания с понедельника, потому что getDay () каждый день возвращает на 1 больше, чем мы хотим.
Я не совсем понимал чужие посты. Вот код javascript, который я использую для отображения недели с воскресенья по субботу относительно данного дня. Так, например, чтобы получить «прошлую неделю», вы проверяете, какими были стойки ворот по воскресеньям и субботам относительно семи дней назад: 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);
Я должен искать это каждый раз, когда мне это нужно. Итак, я надеюсь, что это поможет другим.
TypeError: comparedate.getDay is not a function
- person alexventuraio; 12.01.2016
var comparedate = new Date(); // today comparedate -= 7; // a week ago var dayofweek = comparedate.getDay();
- person undrline - Reinstate Monica; 27.04.2016
Первым днем недели может быть воскресенье или понедельник, в зависимости от того, в какой стране вы находитесь:
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);