Javascript - get array of dates between 2 dates

后端 未结 25 1142
傲寒
傲寒 2020-11-22 15:16
var range = getDates(new Date(), new Date().addDays(7));

I\'d like \"range\" to be an array of date objects, one for each day between the two dates

相关标签:
25条回答
  • 2020-11-22 15:45

    Function:

      var dates = [],
          currentDate = startDate,
          addDays = function(days) {
            var date = new Date(this.valueOf());
            date.setDate(date.getDate() + days);
            return date;
          };
      while (currentDate <= endDate) {
        dates.push(currentDate);
        currentDate = addDays.call(currentDate, 1);
      }
      return dates;
    };
    

    Usage:

    var dates = getDatesRange(new Date(2019,01,01), new Date(2019,01,25));                                                                                                           
    dates.forEach(function(date) {
      console.log(date);
    });
    

    Hope it helps you

    0 讨论(0)
  • 2020-11-22 15:47
    var boxingDay = new Date("12/26/2010");
    var nextWeek  = boxingDay*1 + 7*24*3600*1000;
    
    function getDates( d1, d2 ){
      var oneDay = 24*3600*1000;
      for (var d=[],ms=d1*1,last=d2*1;ms<last;ms+=oneDay){
        d.push( new Date(ms) );
      }
      return d;
    }
    
    getDates( boxingDay, nextWeek ).join("\n");
    // Sun Dec 26 2010 00:00:00 GMT-0700 (Mountain Standard Time)
    // Mon Dec 27 2010 00:00:00 GMT-0700 (Mountain Standard Time)
    // Tue Dec 28 2010 00:00:00 GMT-0700 (Mountain Standard Time)
    // Wed Dec 29 2010 00:00:00 GMT-0700 (Mountain Standard Time)
    // Thu Dec 30 2010 00:00:00 GMT-0700 (Mountain Standard Time)
    // Fri Dec 31 2010 00:00:00 GMT-0700 (Mountain Standard Time)
    // Sat Jan 01 2011 00:00:00 GMT-0700 (Mountain Standard Time)
    
    0 讨论(0)
  • 2020-11-22 15:47

    d3js provides a lot of handy functions and includes d3.time for easy date manipulations

    https://github.com/d3/d3-time

    For your specific request:

    Utc

    var range = d3.utcDay.range(new Date(), d3.utcDay.offset(new Date(), 7));
    

    or local time

    var range = d3.timeDay.range(new Date(), d3.timeDay.offset(new Date(), 7));
    

    range will be an array of date objects that fall on the first possible value for each day

    you can change timeDay to timeHour, timeMonth etc for the same results on different intervals

    0 讨论(0)
  • 2020-11-22 15:47
    1. Generate an array of years:

      const DAYS = () => {
       const days = []
       const dateStart = moment()
       const dateEnd = moment().add(30, ‘days')
       while (dateEnd.diff(dateStart, ‘days') >= 0) {
        days.push(dateStart.format(‘D'))
        dateStart.add(1, ‘days')
       }
       return days
      }
      console.log(DAYS())
      
    2. Generate an arrays for month:

              const MONTHS = () => {
               const months = []
               const dateStart = moment()
               const dateEnd = moment().add(12, ‘month')
               while (dateEnd.diff(dateStart, ‘months') >= 0) {
                months.push(dateStart.format(‘M'))
                dateStart.add(1, ‘month')
               }
               return months
              }
              console.log(MONTHS())
      
    3. Generate an arrays for days:

              const DAYS = () => {
               const days = []
               const dateStart = moment()
               const dateEnd = moment().add(30, ‘days')
               while (dateEnd.diff(dateStart, ‘days') >= 0) {
                days.push(dateStart.format(‘D'))
                dateStart.add(1, ‘days')
               }
               return days
              }
              console.log(DAYS())
      
    0 讨论(0)
  • 2020-11-22 15:48

    Here's a canned method that will accept Moment dates or strings or a mixture as inputs and generate an array of dates as Moment dates. If you don't want Moment dates as output then change what the map() method returns.

    const moment = require('moment');
    
    // ...
    
    /**
     * @param {string|import('moment').Moment} start
     * @param {string|import('moment').Moment} end
     * @returns {import('moment').Moment[]}
     */
    const getDateRange = (start, end) => {
      const s = moment.isMoment(start) ? start : moment(start);
      const e = moment.isMoment(end) ? end : moment(end);
      return [...Array(1 + e.diff(s, 'days')).keys()].map(n => moment(s).add(n, 'days'));
    };
    
    0 讨论(0)
  • 2020-11-22 15:50
    Date.prototype.addDays = function(days) {
        var date = new Date(this.valueOf());
        date.setDate(date.getDate() + days);
        return date;
    }
    
    function getDates(startDate, stopDate) {
        var dateArray = new Array();
        var currentDate = startDate;
        while (currentDate <= stopDate) {
            dateArray.push(new Date (currentDate));
            currentDate = currentDate.addDays(1);
        }
        return dateArray;
    }
    

    Here is a functional demo http://jsfiddle.net/jfhartsock/cM3ZU/

    0 讨论(0)
提交回复
热议问题