此代码已经获取到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
答案 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)