如何获得直到X日期为止的天数,以及如何在X日期达到0时停止计数

时间:2019-05-13 18:45:02

标签: javascript reactjs date datetime

此代码已经获取到x日期为止的天数,但是当x日期到达同一日期时它一直在计数,我如何将其归零以停止计数?

const counters = this.state.counters.map((counters, i) => {
  let untildate = counters.date
  let diffDays1=(function(){ 
    let oneDay = 24*60*60*1000 // hours*minutes*seconds*milliseconds
    let secondDate = new Date(untildate);
    let firstDate = new Date();
    return (`${Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay)))} Days`)
  })();

如果输入日期为2019-04-05T20:00:00.782Z,则输出应为0

2 个答案:

答案 0 :(得分:1)

使用Math.max返回两个值中的较大者。在您的情况下,仅当该天数大于0时,您才想返回剩余天数,否则,您要返回0:

const counters = this.state.counters.map((counters, i) => {
  let untildate = counters.date
  let diffDays1=(function(){ 
    let oneDay = 24*60*60*1000 // hours*minutes*seconds*milliseconds
    let secondDate = new Date(untildate);
    let firstDate = new Date();
    return (`${Math.max(0, Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay))))} Days`)
  })();

答案 1 :(得分:0)

关于如何获取difference between two dates in days的答案很多,例如this

您的代码似乎过于复杂。假设输入日期的格式为2019-05-10,并且您使用的是内置解析器,则可以在UTC中工作,并避免任何夏令时问题。

只需测试以天为单位的差异,如果差异为0或更小,则返回零。否则,退还差额。例如

var dates = ['2019-01-01','2019-05-10','2019-05-20'];

var counters = dates.map(date => {
  let diffDays = (new Date(date) - new Date().setUTCHours(0,0,0,0))/8.64e7;
  return diffDays > 0? diffDays : 0;
});

console.log(counters)