Как получить первый день предыдущей недели из объекта даты в JavaScript? - PullRequest
2 голосов
/ 03 марта 2009

с учетом объекта даты, как получить первый день предыдущей недели

Ответы [ 6 ]

6 голосов
/ 03 марта 2009

Эта библиотека Datejs выглядит так, как будто она может делать такие вещи относительно легко.

5 голосов
/ 03 марта 2009

Код:

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 выше для каждого дня, чем мы хотим.

2 голосов
/ 29 ноября 2012

Я не совсем понял посты других людей. Вот 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);

Я должен искать это каждый раз, когда мне нужно это сделать. Итак, я надеюсь, что это полезно для других.

2 голосов
/ 03 марта 2009
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); 
}
1 голос
/ 03 марта 2009

Первым днем ​​недели может быть воскресенье или понедельник, в зависимости от того, в какой стране вы находитесь:

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));
0 голосов
/ 09 октября 2014

В других примерах у вас будет проблема, когда воскресенье выпадает на другой месяц. Это должно решить проблему:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...