【问题标题】:get all the dates that fall between two dates获取两个日期之间的所有日期
【发布时间】:2013-08-09 04:32:41
【问题描述】:

我遇到了用户选择日期范围的问题。然后我需要找出这两个选定日期之间的日期。他们是通过 jquery 进来的,就像

一样简单

$('#from').val()+"-"+$('#to').val();

它们来自 jqueryUI datepicker,它们看起来像

08/07/2013 - 08/09/2012

但我不知道如何逐步查看日期并确定中间的哪几天。我需要具体的日期,但这变得非常复杂,比如月底和每个月不同的天数。在这个具体的例子中,我需要得到

08/07/2013, 08/08/2013, 08/09/2013

【问题讨论】:

  • "它们来自 jQueryUI datepicker" -- 你有什么理由不能使用 getDate 而是使用日期对象?它会让你的生活更轻松。
  • 如果我有两个日期对象,我如何得到它们之间的每一个?

标签: jquery date


【解决方案1】:

您可以使用 getDate 方法从日期选择器中获取值,因为这将返回一个 Date 对象。然后,从开始日期开始将“当前”日期增加 1 天并将其添加到数组中,直到当前日期与结束日期相同。

请注意,在将 Date() 添加到 between 数组时,您需要创建一个新的 Date(),否则您将只是引用 currentDate 对象,并且您的所有值都是相同的。

Working Demo

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 &lt;= end)
  • @Icarus 不确定你的意思?
  • 您的代码不包括实际选择的日期。如果您选择 8/7 和 8/9,他希望得到 8/7、8/8 和 8/9。您的代码仅推入数组 8/8。关注?
  • @Icarus 我明白了,所以 between 数组只包含所选日期之间的日期。我想这可能是个问题,尽管 startend 变量中有选定的值。
  • 是的,我想要所有的日期,但我相信我可以通过使用 startbetweenend 并将它们放在一起来解决这个问题
【解决方案2】:
            //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])
                }

【讨论】:

    猜你喜欢
    • 2017-06-12
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 2022-07-20
    • 1970-01-01
    • 2016-06-30
    相关资源
    最近更新 更多