代码之家  ›  专栏  ›  技术社区  ›  Ruslan

在javascript中从工作日获取下一个日期

  •  13
  • Ruslan  · 技术社区  · 15 年前

    下一个怎么还 日期 指定的工作日(可以是数字0-6,也可以是星期六)。

    例如,如果今天 2009年10月16日星期五 我通过了:

    • 星期五 ,它将返回今天的日期 2009年10月16日
    • 星期六 收益率 2009年7月17日
    • 星期四 收益率 2009年22月至2009年
    6 回复  |  直到 6 年前
        1
  •  27
  •   Tim    15 年前

    仅仅增加7并不能解决这个问题。

    下面的函数将为您提供一周中的第二天。

    function nextDay(x){
        var now = new Date();    
        now.setDate(now.getDate() + (x+(7-now.getDay())) % 7);
        return now;
    }
    
        2
  •  14
  •   NoelHunter    10 年前

    下面是对蒂姆答案的一个稍微修改过的版本,以解决特定的问题——输入日期d,然后返回所需的一周中的某一天(道指0-6)。

    function nextDay(d, dow){
        d.setDate(d.getDate() + (dow+(7-d.getDay())) % 7);
        return d;
    }
    
        3
  •  3
  •   Community ahmed    7 年前

    展开 user 190106 answer ,此代码应提供您想要的:

    function getNextDay(day, resetTime){
      var days = {
        sunday: 0, monday: 1, tuesday: 2,
        wednesday: 3, thursday: 4, friday: 5, saturday: 6
      };
    
      var dayIndex = days[day.toLowerCase()];
      if (!dayIndex) {
        throw new Error('"' + day + '" is not a valid input.');
      }
    
      var returnDate = new Date();
      var returnDay = returnDate.getDay();
      if (dayIndex !== returnDay) {
        returnDate.setDate(returnDate.getDate() + (dayIndex + (7 - returnDay)) % 7);
      }
    
      if (resetTime) {
        returnDate.setHours(0);
        returnDate.setMinutes(0);
        returnDate.setSeconds(0);
        returnDate.setMilliseconds(0);
      }
      return returnDate;
    }
    
    alert(getNextDay('thursday', true));
    
        4
  •  3
  •   Hari Das    7 年前

    这是另一个简单的解决方案

    //takes dayIndex from sunday(0) to saturday(6)
    function nextDate(dayIndex) {
        var today = new Date();
        today.setDate(today.getDate() + (dayIndex - 1 - today.getDay() + 7) % 7 + 1);
        return today;
    }
    document.write("Next Sunday is: "+nextDate(0).toLocaleString()+"<br/>");
    document.write("Next Thursday is: "+nextDate(4).toLocaleString()+"<br/>");
    document.write("Next Saturday is: "+nextDate(6).toLocaleString());
        6
  •  1
  •   Blauharley    7 年前

    如果你不想通过电话号码,除了工作日的名字( 星期日-星期六 )要查找某个工作日的未来日期,这也会帮助您:

    function getDateOfWeekday(refday){
        var days = {
            monday: 1,
            tuesday: 2,
            wednesday: 3,
            thursday: 4,
            friday: 5,
            saturday: 6,
            sunday: 0
        };
        if(!days.hasOwnProperty(refday))throw new Error(refday+" is not listed in "+JSON.stringify(days));
        var currDate = new Date();
        var currTimestamp = currDate.getTime();
        var triggerDay = days[refday];
        var dayMillDiff=0;
        var dayInMill = 1000*60*60*24;
        // add a day to dayMillDiff as long as the desired refday (sunday for instance) is not reached
        while(currDate.getDay()!=triggerDay){
            dayMillDiff += dayInMill;
            currDate = new Date(currDate.getTime()+dayInMill);
        }
        return new Date(currTimestamp + dayMillDiff);
    }
    
    var sunday = getDateOfWeekday("sunday");
    document.write("Next Sunday is at: <strong>"+sunday.toLocaleString()+"</strong><br/>");
    
    var thursday = getDateOfWeekday("thursday");
    thursday.setHours(0,0,0,0); // set hours/minutes/seconds and millseconds to zero
    document.write("Next Thursday is at: <strong>"+thursday.toLocaleString()+"</strong> on midnight<br/>");
    
    var tuesday = getDateOfWeekday("tuesday");
    document.write("Next Tuesday is at: <strong>"+tuesday.toLocaleString()+"</strong><br/>");