1

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

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 语句以将日期索引与 0 进行比较,这将返回我期望的日期,但我猜这是不正确的方法,因为 0 是星期天。

任何帮助表示赞赏:-)

4

3 回答 3

2

似乎由于我将元素推送到数组的方式,我没有得到预期的日期。我更改了我的代码,以便它为要推送到数组的每个元素创建一个新变量。我没有用 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;
}
于 2013-06-26T09:40:29.610 回答
1

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

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

于 2013-06-25T16:31:49.147 回答
1

这真的很奇怪,我已经测试了你的代码,有趣的是,当我查看 if-Block 内部和 while 循环内部(在数组中最后添加的元素上)时,它在星期一显示在 console.log() 中,但是当我查看完整数组的末尾时(所以当几毫秒过去了)所有日期都是星期二。因此,日期在约 1 毫秒后发生变化。对不起,没有给你答案,但想提一下,以便其他人知道。

于 2013-06-25T17:06:55.993 回答