Учитывая строки дат в формате ISO 8601, вы можете конвертировать в объекты Date, обнулять время, затем сравнивать с сегодняшней датой с обнуленным временем и округлением для изменения летнего времени, если таковые имеются. Например,
function getEvenDaysDiff(d) {
let now = new Date();
now.setHours(0,0,0,0);
let then = new Date(d);
then.setHours(0,0,0,0);
return Math.round((now - then) / 8.64e7);
}
function parseAndFormatDate(d) {
d = new Date(d);
let z = n => (n<10?'0':'')+n;
return d.getFullYear() + '-' +
z(d.getMonth()+1) + '-' +
z(d.getDate());
}
// test - dates are UTC so local dates may differ
let dates = [
'2020-03-17T04:00:00.000Z',
'2020-03-16T14:00:00.000Z',
'2020-03-12T04:30:00.000Z',
'2020-02-17T12:00:00.000Z'
].forEach(
s => console.log(parseAndFormatDate(s) + ' ' + getEvenDaysDiff(s) + ' days ago.')
);
Обратите внимание, что поскольку метками времени являются UT C, дата, которую они представляют, может отличаться от эквивалентной локальной даты. Я предположил, что вы хотите отличия от местных дат. Если вы хотите UT C, тогда используйте методы UT C в getEvenDaysDiff , а функция parseAndFormatDate является излишней.