const arr = [
{
"date": "2019-09-18"
},
{
"date": "2019-09-19"
},
{
"date": "2019-09-21"
},
{
"date": "2019-09-22"
},
{
"date": "2019-09-23"
}
]
function currentStreak(arr) {
let count = 0
arr.reverse().forEach((el, i) => {
if (new Date() - new Date(el.date) === i * 86400000) count++
})
return count
}
我很难让它开始工作。假设当前日期为“ 2019-09-23”,为什么上面的代码在应返回0
时返回3
?
答案 0 :(得分:1)
由于新的Date()会为您提供日期+当前时间,因此无法与提供午夜时间的新日期(YYYY-MM-DD)正确比较。
如果将日期修改为午夜,则可以正确比较。因此您的代码将如下所示。
function currentStreak(arr) {
let count = 0
arr.reverse().forEach((el, i) => {
if ((new Date().setUTCHours(0,0,0,0) - new Date(el.date).setUTCHours(0,0,0,0)) === i * 86400000) count++
})
return count
}
答案 1 :(得分:0)
new Date()
返回this-Tue Nov 05 2019 15:16:22 GMT+0800 (Singapore Standard Time)
因此,在您的if条件下,它不会增加。更改new Date()
的格式并将其与您的数组进行比较。
答案 2 :(得分:0)
const arr = [
{
"date": "2019-09-18"
},
{
"date": "2019-09-19"
},
{
"date": "2019-09-21"
},
{
"date": "2019-09-22"
},
{
"date": "2019-09-23"
}
]
function currentStreak(arr) {
let count = 0
arr.reverse().forEach((el, i) => {
if ((new Date() - new Date(el.date) >= i * 86400000) && (new Date() - new Date(el.date) < (i+1) * 86400000)) count++
})
return count
}
console.log(currentStreak(arr));
它不起作用,因为您没有输入分钟,小时,秒和毫秒。
答案 3 :(得分:0)
您正在传递当前日期,即今天的日期- 11月5日星期二,因此,计算是基于今天的日期进行的,您必须传递日期对象的值
例如:-
const arr = [
{
"date": "2019-09-18"
},
{
"date": "2019-09-19"
},
{
"date": "2019-09-21"
},
{
"date": "2019-09-22"
},
{
"date": "2019-09-23"
}
]
function currentStreak(arr) {
let count = 0
arr.reverse().forEach((el, i) => {
if (new Date('2019-09-23') - new Date(el.date) === i * 86400000) count++
})
return count;
}
console.log(currentStreak(arr))