我试图在两个日期之间返回所有星期一的日期。这是我到目前为止所做的。
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是星期日。
感谢任何帮助: - )
答案 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;
}