Как мне получить первый день предыдущей недели из объекта даты в JavaScript?

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


person Community    schedule 03.03.2009    source источник
comment
Каждый раз он задает немного разные вопросы. ОП, ты хоть знаешь, на каком языке ты должен писать?   -  person Outlaw Programmer    schedule 03.03.2009
comment
нет, раньше я спрашивал за предыдущий месяц   -  person    schedule 03.03.2009
comment
что ты мой первый день? Воскресенье?   -  person Brian R. Bondy    schedule 03.03.2009


Ответы (6)


Эта библиотека Datejs, похоже, относительно легко справляется с подобными задачами.

person thomasrutter    schedule 03.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 () в этом случае на значение субботы + 1 getDay (), чтобы изменить порядок воскресенья до конца недели.

Мы используем значение 6 для вычитания с понедельника, потому что getDay () каждый день возвращает на 1 больше, чем мы хотим.

person Brian R. Bondy    schedule 03.03.2009

Я не совсем понимал чужие посты. Вот код 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);

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

person undrline - Reinstate Monica    schedule 28.11.2012
comment
Выполнение этого по отношению к заданному дню позволяет мне делать то, что заказчику нужно, например, инструмент, который будет разбивать элементы, выполненные по неделям, но все, что у меня есть, - это дата завершения для работы в наборе данных, поэтому код требует для создания набора относительных названий недель на лету. - person undrline - Reinstate Monica; 03.05.2013
comment
Я опробовал ваш код в SailsJS и получил TypeError: comparedate.getDay is not a function - person alexventuraio; 12.01.2016
comment
@Lexynux, я не знаком с SailsJS. Если вы уверены, что "compareate" пишется одинаково оба раза, возможно, ему не нравится вычитание 7 при создании переменной. Попробуйте что-нибудь вроде: 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));
person some    schedule 03.03.2009

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

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);
person Lars de Weert    schedule 09.10.2014

person    schedule
comment
У вас есть ошибка в предыдущий понедельник недели. Каждое воскресенье возвращается только на 6 дней назад. - person some; 03.03.2009