【问题标题】:How to get past 7 days and next 7 days in Javascript如何在 Javascript 中过去 7 天和下一个 7 天
【发布时间】:2017-03-31 15:43:32
【问题描述】:

我正在尝试使用 javascript 日期函数获取过去 7 天和接下来 7 天的日期开始数据和结束日期。

例如:今天 2017 年 3 月 31 日,当我单击上一个按钮时,它将从上一个日期开始计算,即:开始和结束日期,(2017 年 3 月 24 日至 2017 年 3 月 30 日),再次单击上一个(2017 年 3 月 17 日至 3 月 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;

}

第一次正确的时间是 2017 年 3 月 24 日到 2017 年 3 月 30 日,下一次是 2017 年 3 月 24 日到 18 日

有什么想法吗?请

【问题讨论】:

  • 可以使用外部库吗?将 moment.js 用于所有此类事情将消除许多令人头疼的问题和潜在的错误。
  • 如果您想要从 3 月 17 日到 3 月 23 日,但目前是从 18 日到 24 日,为什么不从计算中减去一天?
  • @MikeC:我的逻辑有点混乱,那是你向任何人寻求帮助
  • @Whelkaholism:我很难写下一个逻辑……我在这里感到困惑
  • ProHistoryCtrl 定义在哪里? weekPrevcountweekPrevious 的值是多少?两个函数都不接受任何参数,也不返回任何值。请发布一个最小的工作示例。此处回答了计算正负固定天数的日期:Add +1 to current date

标签: javascript date datetime days


【解决方案1】:

问题似乎出在你的数学上,你可以通过每周减去 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;
}

【讨论】:

    【解决方案2】:

    使用此功能。你不需要额外的功能

    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>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-09
      • 2021-11-27
      • 2014-08-07
      • 2022-07-20
      • 1970-01-01
      • 2012-01-29
      • 2020-03-26
      相关资源
      最近更新 更多