如何计算当前条纹(从当前日期开始连续连续几天)?

时间:2019-11-05 07:09:10

标签: javascript

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

4 个答案:

答案 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))