获取两个日期之间的所有日期

5
我有一个问题,用户选择了一段日期范围。我需要找出在这两个选定日期之间的日期。它们通过jQuery传递过来,格式如下: $('#from').val()+"-"+$('#to').val();
它们来自于jQueryUI的日期选择器,看起来像这样:
08/07/2013 - 08/09/2012
但我无法弄清楚如何遍历日期并确定其中哪些日期。我需要具体的日期,但是对于月末和每个月的天数不同等复杂情况变得非常复杂。在这个例子中,我需要获取以下日期:
08/07/2013, 08/08/2013, 08/09/2013

1
它们来自jQueryUI日期选择器” - 你有什么理由不能使用getDate并使用日期对象进行操作呢?这会让你的生活更加轻松。 - Andrew Whitaker
如果我有两个日期对象,如何获取它们之间的每一个日期? - patricko
2个回答

23
你可以使用 getDate 方法获取日期选择器的值,因为它会返回一个 Date 对象。然后从开始日期开始递增 "current" 日期,并将其添加到数组中,直到当前日期与结束日期相同为止。
请注意,在将其添加到 between 数组时,您需要创建一个新的 Date(),否则您将只引用 currentDate 对象,而所有值都将相同。 演示 已经可以正常工作。
var start = $("#from").datepicker("getDate"),
    end = $("#to").datepicker("getDate"),
    currentDate = new Date(start.getTime()),
    between = []
;

while (currentDate <= end) {
    between.push(new Date(currentDate));
    currentDate.setDate(currentDate.getDate() + 1);
}

+1 但我认为他正在寻找 currentDate.setDate(currentDate.getDate()) ;while (currentDate <= end) - Icarus
@Icarus 不确定你的意思是什么? - cfs
你的代码没有包含实际选择的日期。如果你选择了8/7和8/9,他想要得到8/7、8/8和8/9。但是你的代码只将8/8推入数组中。明白吗? - Icarus
是的,我想要所有的日期,但我相信可以通过使用“开始”到“之间”到“结束”,将它们组合在一起来解决这个问题。 - patricko
@Icarus 很好的捕捉 :) 我更新了代码和 fiddle,添加了开始和结束日期。 - cfs
显示剩余3条评论

1
            //start of with getting the dates from your array 
                var between =[]
                for (var i = 0; i < arrayOfHolsInfoTbl.length; i++){
                    alert( holsInfoTblData[i].StartDate)
                    alert(holsInfoTblData[i].EndStart)
                    var datePickedStr1 = holsInfoTblData[i].StartDate;
                    var datePickedDate1 = new Date(datePickedStr1)//converts string to date object

                    var datePickedStr2 = holsInfoTblData[i].EndStart;
                    var datePickedDate2 = new Date(datePickedStr1)

                    while (datePickedDate1 <= datePickedDate2) {
                        between.push(new Date(datePickedDate1));
                        datePickedDate1.setDate(datePickedDate1.getDate() + 1);
                    }
                }
            //loop through array and print  all dates that have been added to array 
                for (var j = 0; j < between.length; j++) {
                    alert("This is all the dates " + between[j])
                }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接