Javascript - รับอาร์เรย์ของวันที่ระหว่าง 2 วัน


155
var range = getDates(new Date(), new Date().addDays(7));

ฉันต้องการให้ "range" เป็นอาร์เรย์ของอ็อบเจกต์วันหนึ่งสำหรับแต่ละวันระหว่างสองวัน

เคล็ดลับก็คือมันควรจะจัดการกับขอบเขตเดือนและปีเช่นกัน

คำตอบ:


171
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;
}

นี่คือการทำงานสาธิต http://jsfiddle.net/jfhartsock/cM3ZU/


2
ขอบคุณจอห์น ฉันส่วนใหญ่ใช้ของคุณ แต่คุณมีข้อผิดพลาด byRef ในปัจจุบันวันที่ไม่สามารถผลักไปยังอาร์เรย์หรือคุณจะจบลงด้วยอาร์เรย์ขององค์ประกอบ n ทั้งหมดเป็นวันสุดท้าย เปลี่ยนเป็น currentDate = new Date (currentDate)
Scott Klarenbach

นี่เป็นสิ่งที่ดีสำหรับวันที่ในอนาคต แต่เมื่อฉันทำงานในวันที่ผ่านมาเช่น 30 วันก่อนที่ฉันควรเปลี่ยนรหัสด้านบนเพื่อรับวันที่เท่านั้นไม่ใช่เวลา
vaibhav kulkarni

@vaibhavkulkarni คุณสามารถย้อนกลับส่วนเสริม () ต้นแบบและแก้ไขลูป while นอกจากนี้ความคิดเห็นไม่ใช่ที่สำหรับเริ่มคำถามใหม่
John Hartsock

เราควรลบเวลาออกจากstartDateและดีกว่าendDateไหม เพราะหากstartDateเวลาช้ากว่าstopDateเวลาก็จะไม่รวมstopDateอยู่ในผลลัพธ์ใช่ไหม
Hp93

@ Hp93 ไม่แน่ใจว่าสิ่งที่คุณพูดถึง หากคุณเรียกใช้ซอฉันให้คุณจะเห็นว่ามันครอบคลุมสถานการณ์ที่
John Hartsock

58

ลองสิ่งนี้อย่าลืมใส่ช่วงเวลา js

function getDates(startDate, stopDate) {
    var dateArray = [];
    var currentDate = moment(startDate);
    var stopDate = moment(stopDate);
    while (currentDate <= stopDate) {
        dateArray.push( moment(currentDate).format('YYYY-MM-DD') )
        currentDate = moment(currentDate).add(1, 'days');
    }
    return dateArray;
}

เพียงการปรับปรุงเล็กน้อย: แนะนำการจดชวเลขสำหรับการสร้างอาร์เรย์var dateArray = [];รายละเอียดที่นี่
Adrian Moisa

มันเป็นวิธีการใหม่ในการกำหนดอาร์เรย์และฉันคิดว่ามันสั้นกว่า / สะอาดกว่า
Mohammed Safeer

1
การแก้ไขที่สำคัญ : var currentDate = moment(startDate);ในกรณีที่คุณใช้วิธีนี้สองครั้งในวันที่ moment.js เดียวกันคุณจะงงว่าทำไมมันถึงใช้งานได้ในครั้งแรก สิ่งนี้เกิดขึ้นเพราะจาวาสคริปต์ส่งต่อวัตถุโดยการอ้างอิงเพื่อให้ฟังก์ชั่นสิ้นสุดลงโดยใช้ startDate สองครั้ง (ซึ่งกลายพันธุ์ทั้งหมดแล้ว) การแก้ไขการแก้ไขด้านบนช่วยให้มั่นใจได้ว่าคุณกำลัง wroking กับวัตถุที่เป็นเอกลักษณ์และไม่ซ้ำใครในขอบเขตการทำงาน ตรวจสอบซอ
Adrian Moisa

52

ฉันดูทุกสิ่งข้างต้น จบลงด้วยการเขียนตัวเอง คุณไม่จำเป็นต้อง momentjs สำหรับเรื่องนี้ Native for loop นั้นเพียงพอและเหมาะสมที่สุดเนื่องจาก for for loop นั้นมีอยู่เพื่อนับค่าในช่วง

หนึ่งในสายการบิน:

var getDaysArray = function(s,e) {for(var a=[],d=new Date(s);d<=e;d.setDate(d.getDate()+1)){ a.push(new Date(d));}return a;};

รุ่นยาว

var getDaysArray = function(start, end) {
    for(var arr=[],dt=new Date(start); dt<=end; dt.setDate(dt.getDate()+1)){
        arr.push(new Date(dt));
    }
    return arr;
};

รายการวันที่ในระหว่าง:

var daylist = getDaysArray(new Date("2018-05-01"),new Date("2018-07-01"));
daylist.map((v)=>v.toISOString().slice(0,10)).join("")
/*
Output: 
    "2018-05-01
    2018-05-02
    2018-05-03
    ...
    2018-06-30
    2018-07-01"
*/

วันนับจากวันที่ผ่านมาจนถึงปัจจุบัน:

var daylist = getDaysArray(new Date("2018-05-01"),new Date());
daylist.map((v)=>v.toISOString().slice(0,10)).join("")

เกิดอะไรขึ้นถ้าคุณต้องการที่จะดึงข้อมูลทุกวันที่คุณระบุในgetDaysArray? ไม่ใช่วันระหว่างนั้น
Jonjie

ขอบคุณ! สิ่งที่ฉันต้องการโดยไม่มีการพึ่งพา :)
mpsyp

2
ฟังก์ชั่นนี้จัดการวันที่แหล่งที่มา :) ฉันทดสอบแล้ว
Hamed Taheri

4
@ HamedTaheri ใช่ แต่ที่สามารถแก้ไขได้โดยการกำหนดสำเนาของการเริ่มต้นที่จะDTแทนที่จะเริ่มต้นfor (var arr=[], dt=new Date(start), ...)ตัวเองเช่น ;-)
RobG

ทำงานได้ดี แต่แย่เกินไปสำหรับ a (;;) ลูปจะไม่สามารถอ่านได้ในการบำรุงรักษาซอฟต์แวร์เมื่อคุณทำงานกับผู้คนจำนวนมาก
Victor

27

ฉันใช้moment.jsและTwix.jsพวกเขาให้การสนับสนุนที่ดีมากสำหรับการจัดการวันและเวลา

var itr = moment.twix(new Date('2012-01-15'),new Date('2012-01-20')).iterate("days");
var range=[];
while(itr.hasNext()){
    range.push(itr.next().toDate())
}
console.log(range);

ฉันมีสิ่งนี้ทำงานบนhttp://jsfiddle.net/Lkzg1bxb/


ฉันดาวน์โหลดไฟล์ทั้งหมดที่เกี่ยวข้อง แต่ยังคงแสดงข้อผิดพลาด TypeError: moment.twix ไม่ใช่ฟังก์ชั่น
vaibhav kulkarni

คุณอาจต้องรวมไลบรารี ใน nodejs มันจะเหมือน var ช่วง = ต้องการ ('ครู่'); ต้อง ( 'Twix');
Dr Bala Soundararaj

18
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)

3
เพื่อความปลอดภัยซึ่งแตกต่างจากข้างต้นคุณควรเลือกเวลาในระหว่างวันเพื่อหลีกเลี่ยงการเปลี่ยนแปลงเล็กน้อยเนื่องจากประหยัดเวลากลางวัน
Phrogz

ฉันหวังว่าคุณจะเพิ่มการเปลี่ยนรหัสกลางของวันด้วย
ไก่

15
function (startDate, endDate, addFn, interval) {

 addFn = addFn || Date.prototype.addDays;
 interval = interval || 1;

 var retVal = [];
 var current = new Date(startDate);

 while (current <= endDate) {
  retVal.push(new Date(current));
  current = addFn.call(current, interval);
 }

 return retVal;

}

1
สิ่งนี้จะหยุดลงหากคุณระบุวันที่ในลำดับที่ไม่ถูกต้อง
pie6k

11

หากคุณกำลังใช้ช่วงเวลาหนึ่งคุณสามารถใช้ "ปลั๊กอินอย่างเป็นทางการ" ของพวกเขาสำหรับช่วงmoment-rangeและจากนั้นจะกลายเป็นเรื่องไม่สำคัญ

ตัวอย่างโหนดช่วงเวลา:

const Moment = require('moment');
const MomentRange = require('moment-range');
const moment = MomentRange.extendMoment(Moment);

const start = new Date("11/30/2018"), end = new Date("09/30/2019")
const range = moment.range(moment(start), moment(end));

console.log(Array.from(range.by('day')))

ตัวอย่างเบราว์เซอร์ช่วงเวลา:

window['moment-range'].extendMoment(moment);

const start = new Date("11/30/2018"), end = new Date("09/30/2019")
const range = moment.range(moment(start), moment(end));

console.log(Array.from(range.by('day')))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-range/4.0.1/moment-range.js"></script>

ตัวอย่างของวันที่ fns:

หากคุณกำลังใช้date-fnsแล้วeachDayเป็นเพื่อนของคุณและคุณได้รับโดยไกลที่สั้นที่สุดและมากที่สุดคำตอบที่รัดกุม:

console.log(dateFns.eachDay(
  new Date(2018, 11, 30),
  new Date(2019, 30, 09)
))
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.29.0/date_fns.min.js"></script>


8

เพิ่งเจอคำถามนี้วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการใช้ช่วงเวลา:

คุณต้องติดตั้งช่วงเวลาและช่วงเวลาก่อน:

const Moment = require('moment');
const MomentRange = require('moment-range');
const moment = MomentRange.extendMoment(Moment);

const start = moment()
const end = moment().add(2, 'months')
const range = moment.range(start, end)
const arrayOfDates = Array.from(range.by('days'))
console.log(arrayOfDates)

6

ฉันใช้โซลูชัน @Mohammed Safeer มาระยะหนึ่งแล้วฉันได้ทำการปรับปรุงเล็กน้อย การใช้วันที่กำหนดเป็นวิธีปฏิบัติที่ไม่ถูกต้องขณะทำงานในคอนโทรลเลอร์ของคุณ moment().format()ควรใช้เพื่อการแสดงผลในมุมมองเท่านั้น นอกจากนี้โปรดจำไว้ว่าmoment().clone()ให้แน่ใจว่าได้แยกจากพารามิเตอร์อินพุตซึ่งหมายความว่าวันที่อินพุตจะไม่เปลี่ยนแปลง ฉันขอแนะนำให้คุณใช้ moment.js เมื่อทำงานกับวันที่

การใช้งาน:

  • ให้วันที่ moment.js เป็นค่าสำหรับstartDate, endDateพารามิเตอร์
  • intervalพารามิเตอร์เป็นทางเลือกและกำหนดค่าเริ่มต้นเป็น 'วัน' ใช้ช่วงเวลา suported โดย.add()วิธีการ (moment.js) รายละเอียดเพิ่มเติมที่นี่
  • totalพารามิเตอร์มีประโยชน์เมื่อระบุช่วงเวลาเป็นนาที มันเริ่มต้นที่ 1

วิงวอน:

var startDate = moment(),
    endDate = moment().add(1, 'days');

getDatesRangeArray(startDate, endDate, 'minutes', 30);

ฟังก์ชั่น:

var getDatesRangeArray = function (startDate, endDate, interval, total) {
    var config = {
            interval: interval || 'days',
            total: total || 1
        },
        dateArray = [],
        currentDate = startDate.clone();

    while (currentDate < endDate) {
        dateArray.push(currentDate);
        currentDate = currentDate.clone().add(config.total, config.interval);
    }

    return dateArray;
};

6

การใช้ ES6 คุณมี Array.from หมายความว่าคุณสามารถเขียนฟังก์ชั่นที่หรูหรามากซึ่งช่วยให้ช่วงเวลาแบบไดนามิก (ชั่วโมงวันเดือน)

function getDates(startDate, endDate, interval) {
const duration = endDate - startDate;
const steps = duration / interval;
return Array.from({length: steps+1}, (v,i) => new Date(startDate.valueOf() + (interval * i)));
}
const startDate = new Date(2017,12,30);
const endDate = new Date(2018,1,3);
const dayInterval = 1000 * 60 * 60 * 24; // 1 day
const halfDayInterval = 1000 * 60 * 60 * 12; // 1/2 day

console.log("Days", getDates(startDate, endDate, dayInterval));
console.log("Half Days", getDates(startDate, endDate, halfDayInterval));


2
"Elegant" ขึ้นอยู่กับมุมมองของคุณ new Date(2017,12,30)คือ 30 มกราคม 2018 สำหรับฉันช่วงวันที่เริ่มวันที่ 29 มกราคม 2018 ไม่ใช่ทุกวันมีความยาว 8.64e7 ms (24 ชั่วโมง) ที่มีการบันทึกการปรับเวลาตามฤดูกาล ;-)
RobG

5

เมื่อเร็ว ๆ นี้ฉันทำงานกับ moment.js ต่อไปนี้เป็นการหลอกลวง ..

function getDateRange(startDate, endDate, dateFormat) {
        var dates = [],
            end = moment(endDate),
            diff = endDate.diff(startDate, 'days');

        if(!startDate.isValid() || !endDate.isValid() || diff <= 0) {
            return;
        }

        for(var i = 0; i < diff; i++) {
            dates.push(end.subtract(1,'d').format(dateFormat));
        }

        return dates;
    };
    console.log(getDateRange(startDate, endDate, dateFormat));

ผลลัพธ์จะเป็น:

["09/03/2015", "10/03/2015", "11/03/2015", "12/03/2015", "13/03/2015", "14/03/2015", "15/03/2015", "16/03/2015", "17/03/2015", "18/03/2015"]

3
var listDate = [];
var startDate ='2017-02-01';
var endDate = '2017-02-10';
var dateMove = new Date(startDate);
var strDate = startDate;

while (strDate < endDate){
  var strDate = dateMove.toISOString().slice(0,10);
  listDate.push(strDate);
  dateMove.setDate(dateMove.getDate()+1);
};
console.log(listDate);

//["2017-02-01", "2017-02-02", "2017-02-03", "2017-02-04", "2017-02-05", "2017-02-06", "2017-02-07", "2017-02-08", "2017-02-09", "2017-02-10"]

1
โปรดเพิ่มคำอธิบายเพิ่มเติมและ / หรือข้อมูลเกี่ยวกับคำตอบของคุณและวิธีแก้ปัญหาที่ถามเพื่อให้ผู้อื่นสามารถเข้าใจได้ง่ายโดยไม่ต้องขอคำชี้แจง
koceeng

ฉันพบว่านี่คือการข้าม 2016-03-31 ด้วยเหตุผลบางอย่าง!
woodhead92

1
คุณไม่ควรมีvarมาก่อนstrDateในขณะที่ลูป!
Boris Yakubchik

2

d3jsมีฟังก์ชั่นที่มีประโยชน์มากมายและรวมถึงd3.timeเพื่อการปรับเปลี่ยนวันที่ที่ง่ายดาย

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

สำหรับคำขอเฉพาะของคุณ:

Utc

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

หรือเวลาท้องถิ่น

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

range จะเป็นอาร์เรย์ของวัตถุวันที่ที่ตกอยู่ในค่าแรกสุดที่เป็นไปได้ในแต่ละวัน

คุณสามารถเปลี่ยน timeDay เป็น timeHour, timeMonth และอื่น ๆ สำหรับผลลัพธ์เดียวกันในช่วงเวลาที่ต่างกัน


2

ต่อไปนี้เป็นสายการบินหนึ่งที่ไม่ต้องการไลบรารีใด ๆ ในกรณีที่คุณไม่ต้องการสร้างฟังก์ชันอื่น เพียงแค่แทนที่ startDate (สองแห่ง) และ endDate (ซึ่งเป็นวัตถุวันที่ js) ด้วยตัวแปรหรือค่าวันที่ของคุณ แน่นอนคุณสามารถห่อไว้ในฟังก์ชั่นได้หากคุณต้องการ

Array(Math.floor((endDate - startDate) / 86400000) + 1).fill().map((_, idx) => (new Date(startDate.getTime() + idx * 86400000)))

สิ่งนี้ไม่นำมาพิจารณาประกอบการเปลี่ยนแปลงตามฤดูกาล / เวลาออมแสงมาตรฐาน .. บางวันก็นานกว่าและบางวันก็สั้นลง
Mike

2

ฉันใช้ฟังก์ชั่นนี้

function getDatesRange(startDate, stopDate) {
    const ONE_DAY = 24*3600*1000;
    var days= [];
    var currentDate = new Date(startDate);
    while (currentDate <= stopDate) {
        days.push(new Date (currentDate));
        currentDate = currentDate - 1 + 1 + ONE_DAY;
    }
    return days;
}

2

ฉันใช้ง่ายในขณะที่วนรอบในการคำนวณระหว่างวันที่

var start = new Date("01/05/2017");
var end = new Date("06/30/2017");
var newend = end.setDate(end.getDate()+1);
end = new Date(newend);
while(start < end){
   console.log(new Date(start).getTime() / 1000); // unix timestamp format
   console.log(start); // ISO Date format          
   var newDate = start.setDate(start.getDate() + 1);
   start = new Date(newDate);
}


1

หมายเหตุ:ฉันทราบว่านี่แตกต่างจากโซลูชันที่ขอเล็กน้อย แต่ฉันคิดว่าหลายคนจะพบว่ามีประโยชน์

หากคุณต้องการที่จะหาแต่ละ "x" ช่วงเวลา (วันเดือนปี ฯลฯ ... ) ระหว่างวันที่สองวัน, moment.jsและช่วงเวลาช่วงแพคเกจขยายเปิดใช้งานฟังก์ชันนี้

ตัวอย่างเช่นหากต้องการค้นหาแต่ละวันที่ 30 ระหว่างวันที่สองวัน :

window['moment-range'].extendMoment(moment);

var dateString = "2018-05-12 17:32:34.874-08";
var start  = new Date(dateString);
var end    = new Date();
var range1 = moment.range(start, end);
var arrayOfIntervalDates = Array.from(range1.by('day', { step: 30 }));

arrayOfIntervalDates.map(function(intervalDate){
  console.log(intervalDate.format('YY-M-DD'))
});

1
  1. สร้างอาร์เรย์ของปี:

    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. สร้างอาร์เรย์สำหรับเดือน:

            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. สร้างอาร์เรย์สำหรับวัน:

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

1

คุณสามารถทำได้อย่างง่ายดายโดยใช้สักครู่ JS

เพิ่มช่วงเวลาในการอ้างอิงของคุณ

npm i moment

จากนั้นนำเข้าสิ่งนั้นในไฟล์ของคุณ

var moment = require("moment");

จากนั้นใช้รหัสต่อไปนี้เพื่อรับรายการวันที่ทั้งหมดระหว่างสองวัน

let dates = [];
let currDate = moment.utc(new Date("06/30/2019")).startOf("day");
let lastDate = moment.utc(new Date("07/30/2019")).startOf("day");

do {
 dates.push(currDate.clone().toDate());
} while (currDate.add(1, "days").diff(lastDate) < 0);
dates.push(currDate.clone().toDate());

console.log(dates);

0

สิ่งนี้อาจช่วยคน

คุณสามารถรับเอาต์พุตแถวจากสิ่งนี้และจัดรูปแบบวัตถุ row_date ตามที่คุณต้องการ

var from_date = '2016-01-01';
var to_date = '2016-02-20';

var dates = getDates(from_date, to_date);

console.log(dates);

function getDates(from_date, to_date) {
  var current_date = new Date(from_date);
  var end_date     = new Date(to_date);

  var getTimeDiff = Math.abs(current_date.getTime() - end_date.getTime());
  var date_range = Math.ceil(getTimeDiff / (1000 * 3600 * 24)) + 1 ;

  var weekday = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
  var months = ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"];
  var dates = new Array();

  for (var i = 0; i <= date_range; i++) {
     var getDate, getMonth = '';

     if(current_date.getDate() < 10) { getDate = ('0'+ current_date.getDate());}
     else{getDate = current_date.getDate();}

    if(current_date.getMonth() < 9) { getMonth = ('0'+ (current_date.getMonth()+1));}
    else{getMonth = current_date.getMonth();}

    var row_date = {day: getDate, month: getMonth, year: current_date.getFullYear()};
    var fmt_date = {weekDay: weekday[current_date.getDay()], date: getDate, month: months[current_date.getMonth()]};
    var is_weekend = false;
    if (current_date.getDay() == 0 || current_date.getDay() == 6) {
        is_weekend = true;
    }
    dates.push({row_date: row_date, fmt_date: fmt_date, is_weekend: is_weekend});
    current_date.setDate(current_date.getDate() + 1);
 }
 return dates;
}

https://gist.github.com/pranid/3c78f36253cbbc6a41a859c5d718f362.js


0

นี่คือวิธีการบรรจุกระป๋องที่จะยอมรับช่วงเวลาหรือสตริงหรือส่วนผสมเป็นอินพุตและสร้างอาร์เรย์ของวันที่เป็นช่วงเวลา หากคุณไม่ต้องการให้ Moment date เป็นผลลัพธ์ให้เปลี่ยนmap()วิธีการส่งคืน

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

โซลูชันของ @ softvar แต่รวมถึงตัวเลือกวันที่ทำงาน

/**
 * Returns array of working days between two dates.
 *
 * @param {string} startDate
 *   The start date in yyyy-mm-dd format.
 * @param {string} endDate
 *   The end date in yyyy-mm-dd format.
 * @param {boolean} onlyWorkingDays
 *   If true only working days are returned. Default: false
 *
 * @return {array}
 *   Array of dates in yyyy-mm-dd string format.
 */
function getDates(startDate, stopDate, onlyWorkingDays) {
  let doWd = typeof onlyWorkingDays ==='undefined' ? false : onlyWorkingDays;

  let dateArray = [];  
  let dayNr;
  let runDateObj = moment(startDate);  
  let stopDateObj = moment(stopDate);

  while (runDateObj <= stopDateObj) {
    dayNr = runDateObj.day();
    if (!doWd || (dayNr>0 && dayNr<6)) {
     dateArray.push(moment(runDateObj).format('YYYY-MM-DD'));  
    }

    runDateObj = moment(runDateObj).add(1, 'days');
  }
  return dateArray;
}

0

ฟังก์ชั่น:

  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;
};

การใช้งาน:

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

หวังว่ามันจะช่วยคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.