Get next date from weekday in JavaScript

前端 未结 6 1120
心在旅途
心在旅途 2020-12-01 18:18

How can one return the next date of a given weekday (it could be either a number 0-6 or names Sunday-Saturday).

Example, if today, on Friday

相关标签:
6条回答
  • 2020-12-01 18:33

    Just adding 7 doesn't solve the problem.

    The below function will give you the next day of the week.

    function nextDay(x){
        var now = new Date();    
        now.setDate(now.getDate() + (x+(7-now.getDay())) % 7);
        return now;
    }
    
    0 讨论(0)
  • 2020-12-01 18:33

    Here is another simple solution

    //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());

    0 讨论(0)
  • 2020-12-01 18:34

    And if you do not want do pass numbers but weekday-names (sunday - saturday) to find a future date of a certain weekday, then this helps you as well:

    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/>");

    0 讨论(0)
  • 2020-12-01 18:37

    To expand on user 190106's answer, this code should give you what you wanted:

    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 !== undefined) {
        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));
    
    0 讨论(0)
  • 2020-12-01 18:41

    A swiss-knife tool for javascript DateTime programming.

    http://www.datejs.com/

    0 讨论(0)
  • 2020-12-01 18:46

    Here's a slightly modified version to Tim's answer to address the specific question-- pass in a date d, and, and a desired day of week (dow 0-6), return the date

    function nextDay(d, dow){
        d.setDate(d.getDate() + (dow+(7-d.getDay())) % 7);
        return d;
    }
    
    0 讨论(0)
提交回复
热议问题