在JavaScript中获取两个日期之间所有星期一的日期

时间:2013-06-25 16:22:41

标签: javascript date

我试图在两个日期之间返回所有星期一的日期。这是我到目前为止所做的。

function populate_week_range_options(){
    var start_week_date = new Date(2012, 7-1, 2); // no queries exist before this
    //console.log(start_week_date);
    var todays_date = new Date();

    // array to hold week commencing dates
    var week_commencing_dates = new Array();
    week_commencing_dates.push(start_week_date);

    while(start_week_date < todays_date){
        var next_date = start_week_date.setDate(start_week_date.getDate() + 1);

        start_week_date = new Date(next_date);
        //console.log(start_week_date);
        if(start_week_date.getDay() == 1){
            week_commencing_dates.push(start_week_date);
        }

       //
    }

    return week_commencing_dates;
}
console.log(populate_week_range_options());

根据我在getDay()函数中读到的文档,它返回一个表示星期几的索引(分别为0到6,星期日到星期六)

然而,由于某种原因,我的函数返回星期二 - 我无法弄清楚为什么!

我更改了if语句,将day index与0进行比较,这会返回我期待的日期,但我猜这是不正确的方法,因为0是星期日。

感谢任何帮助: - )

3 个答案:

答案 0 :(得分:1)

getDay()根据当地时区返回日期。我假设您的日期从UTC时间转换为当地时间,并在您的计算机中设置了偏移量,这将更改日期,从而更改星期几。我不能在这里测试这个。

编辑:我认为你应该在这里使用getUTCDay()。

答案 1 :(得分:1)

这真的很奇怪,我已经测试了你的代码,有趣的是,当我查看if-Block内部和while循环内部时,它会在console.log()中显示星期一(在LAST中添加了元素)数组),但是当我看到完整数组的末尾时(所以当经过几毫秒)所有日期都是星期二。所以这一天在~1毫秒后变化。抱歉,没有给你答案,但想提一下,所以其他任何人都可能弄清楚。

答案 2 :(得分:1)

似乎我没有得到我期望的日期,因为我将元素推送到数组的方式。我更改了我的代码,以便为每个要推送到数组的元素创建一个新变量。我不用JavaScript编写代码,所以不要完全理解这一点,如果有人能解释这种行为,请欣赏它。尽管如此,这是我更新的代码返回预期日期:

function populate_week_range_options(){
    var start_week_date = new Date(2012, 7-1, 2); // no queries exist before this
    var todays_date = new Date();

    // array to hold week commencing dates
    var week_commencing_dates = new Array();
    var first_monday_date = new Date(2012, 7-1, 2); // no queries exist before this
    week_commencing_dates.push(first_monday_date);

    while(start_week_date < todays_date){
        var next_date = start_week_date.setDate(start_week_date.getDate() + 1);

        var next_days_date = new Date(next_date);
        day_index = next_days_date.getDay();
        if(day_index == 1){
            week_commencing_dates.push(next_days_date);
        }
        // increment the date
        start_week_date = new Date(next_date);
    }

    return week_commencing_dates;
}