Как пройти 7 дней и следующие 7 дней в Javascript

Я пытаюсь получить последние 7 дней и следующие 7 дней даты начала и окончания даты, используя функцию даты javascript.

Например: сегодня, 31 марта 2017 г., когда я нажимаю кнопку «Предыдущая», она будет рассчитываться на основе предыдущей даты, то есть: даты начала и окончания (с 24 марта 2017 г. по 30 марта 2017 г.), снова нажмите «Предыдущая» (с 17 марта 2017 г. по 23 марта 2017 г.) и т. д. ..

То же самое будет повторяться для следующей кнопки.

Я пробовал следующие вещи, но это не работает

 function getPreviousWeek(){
      ProHistoryCtrl.weekPrevcount = ProHistoryCtrl.weekPrevcount + 1;
      ProHistoryCtrl.weekPrevious  = (-6 * ProHistoryCtrl.weekPrevcount);
      getByWeek();
}

 function getNextWeek(){
      ProHistoryCtrl.weekPrevcount = ProHistoryCtrl.weekPrevcount - 1;
      ProHistoryCtrl.weekPrevious  = (-6 * ProHistoryCtrl.weekPrevcount);
      getByWeek();
}


function getByWeek(){   

      console.log("weekpreviouscount" + ProHistoryCtrl.weekPrevcount); //-6,-12,-18,-24
      console.log("weekprevious" + ProHistoryCtrl.weekPrevious); //-6,-12,-18,-24
      var d2 = new Date(); // 31.01.2017
      var d1 = new Date(d2);
      d1.setDate(d2.getDate() - 1); // 30.01.2017
      var previousWeek = '';
      var current_day = '';

      console.log("d2date" + d1.getDate());
      console.log("week2" + ProHistoryCtrl.weekPrevious)
      previousWeek = new Date(d1);
      previousWeek.setDate(d1.getDate() + ProHistoryCtrl.weekPrevious); // 30-13=17

      current_day = new Date(d1); // 30.01.2017
      current_day.setDate(d1.getDate() + ProHistoryCtrl.weekPrevious + 6); // 30-12+5=23

      console.log("currentdayprevious" + ProHistoryCtrl.weekPrevious); //-6,-12,-18,-24

      var previousWeekUTCTimestamp = Math.floor(previousWeek.getTime() / 1000);
      var currentUTC = Math.floor(current_day.getTime() / 1000);

      console.log("previousWeekUTCTimestamp" + previousWeekUTCTimestamp);
      console.log("currentUTC" + currentUTC);

      var sinceUTC = previousWeekUTCTimestamp;
      var untilUTC = currentUTC;

}

Первый раз наступает с 24 марта 2017 г. по 30 марта 2017 г., следующий раз с 24 марта по 18 марта 2017 г.

Любые идеи? Пожалуйста


person 1630082    schedule 31.03.2017    source источник
comment
Можно ли использовать внешние библиотеки? Использование moment.js для всего такого рода избавит от многих головных болей и потенциальных ошибок.   -  person Whelkaholism    schedule 31.03.2017
comment
Если вы хотите получить период с 17 по 23 марта, но в настоящее время получаете период с 18 по 24 марта, почему бы вам просто не вычесть один день из своего расчета?   -  person Mike Cluck    schedule 31.03.2017
comment
@MikeC: я путаю логику, вот и прошу помощи у кого-нибудь   -  person 1630082    schedule 31.03.2017
comment
@Whelkaholism: я мучаюсь, чтобы написать предыдущую логику ... кое-что, что я здесь перепутал   -  person 1630082    schedule 31.03.2017
comment
Где определяется ProHistoryCtrl? Каковы значения для weekPrevcount и weekPrevious? Ни одна из функций не принимает никаких аргументов и не возвращает никаких значений. Пожалуйста, опубликуйте минимальный рабочий пример. Вычисление даты плюс или минус фиксированное количество дней дается здесь: Добавить + 1 до текущей даты.   -  person RobG    schedule 01.04.2017


Ответы (2)


Проблема, кажется, связана с вашей математикой, вы получаете предыдущую неделю, вычитая 6 за каждую неделю, а затем вычитая дополнительную 1. Это нормально для первой недели, где -6 -1 = -7, однако для второй недели это (-6 * 2) - 1 = -13, но две недели должны быть -14. Неверный код:

ProHistoryCtrl.weekPrevious  = (-6 * ProHistoryCtrl.weekPrevcount);

d1.setDate(d2.getDate() - 1);

Поэтому решение будет таким:

 function getPreviousWeek(){
            ProHistoryCtrl.weekPrevcount = ProHistoryCtrl.weekPrevcount + 1;
            ProHistoryCtrl.weekPrevious  = (-7 * ProHistoryCtrl.weekPrevcount);
            getByWeek();
}

 function getNextWeek(){
            ProHistoryCtrl.weekPrevcount = ProHistoryCtrl.weekPrevcount - 1;
            ProHistoryCtrl.weekPrevious  = (-7 * ProHistoryCtrl.weekPrevcount);
            getByWeek();
}

function getByWeek(){   

    var d2 = new Date(); // 31.01.2017
    var d1 = new Date(d2);
    d1.setDate(d2.getDate()); // 30.01.2017
    var previousWeek = '';
    var current_day = '';

    previousWeek = new Date(d1);
    previousWeek.setDate(d1.getDate() + ProHistoryCtrl.weekPrevious); // 30-13=17

    current_day = new Date(d1); // 30.01.2017
    current_day.setDate(d1.getDate() + ProHistoryCtrl.weekPrevious + 6); // 30-12+5=23

    var previousWeekUTCTimestamp = Math.floor(previousWeek.getTime() / 1000);
    var currentUTC = Math.floor(current_day.getTime() / 1000);

    var sinceUTC = previousWeekUTCTimestamp;
    var untilUTC = currentUTC;
}
person cookie_monster    schedule 01.04.2017

Используйте эту функцию. Вам не нужны дополнительные функции

var btn = document.querySelector("button")

Date.prototype.addDays = function(days) {
  this.setDate(this.getDate() + parseInt(days));
  return this;
};


function getDate(days) {
  var date = new Date().addDays(days);
  return date
}



btn.addEventListener("click", function() {
  var pastSevenDays = getDate(-7)
  var nextSevenDays = getDate(7)
  // only date
  console.log(pastSevenDays.toLocaleString().slice(0,10))
  console.log(nextSevenDays.toLocaleString().slice(0,10))
}, false)
<button>Get Dates</button>

person Ali    schedule 01.04.2017