2015-05-20 2 views
0

Я пытаюсь проверить, не указана ли какая-либо из дат в объекте за последние 3 дня текущей даты с использованием момента.Момент: проверьте, была ли дата за последние 3 дня.

Ключами объекта являются даты, но я не уверен, как использовать момент, чтобы сравнить их с текущей датой.

Редактировать: Причина, по которой я хочу найти даты в течение последних 3 дней, - это получить количество проблем, обнаруженных в пределах этого диапазона дат. Я думаю, что могу сделать это, если я могу просто получить логический флаг, чтобы определить, попадает ли объект в хранилище в пределах этого диапазона дат.

Вот ссылка на скрипке я сделал: http://jsfiddle.net/yx22qqvz/

var currentDate = moment().format('YYYY-MM-DD'); 
var store = { 
    "2015-05-20": { 
     "issues": 1 
    }, 
    "2015-05-18": { 
     "issues": 2 
    }, 
    "2015-05-17": { 
     "issues": 3 
    }, 
    "2015-05-16": { 
     "issues": 1 
    } 
}; 

console.log(currentDate, store); 

for (var prop in store) { 
    if (store.hasOwnProperty(prop)) { 
     console.log(prop); 
     console.log(moment().diff(currentDate, 'days') > 3); 
    } 
} 
+0

Я не знаю о моменте, но я думаю, что самый простой и эффективный способ добиться этого - прочитать текущую временную метку с помощью (date Date). GetTime(), substract 3 × 24 × 60 × 60 × 1000 и сравниваются с той же самой операцией (кроме выражения) над каждой меткой времени. – bitifet

ответ

1

Рассмотрим:

// keep this as a moment, and use noon to avoid DST issues 
var currentDate = moment().startOf('day').hour(12); 

... 

     // parse the property at noon also 
     var m = moment(prop + "T12:00:00"); 

     // diff the current date (as a moment), against the specific moment 
     console.log(currentDate.diff(m, 'days') > 3); 

I've also updated your fiddle.

В вашем старом кодексе вы просто сравнивали текущий момент (moment()) с currentDate, который всегда будет 0 дней. Вы должны проанализировать рассматриваемое свойство, чтобы сравнить этот бит данных.

Использование полдень позволит избежать проблемы, когда в некоторых часовых поясах и некоторых браузерах полночь дня перехода на летнее время корректируется до 23:00 в предыдущий день. Поскольку вы работаете с целыми датами, безопаснее явно использовать полдень вместо полуночи.

+0

Это именно то, что я ищу. Благодарим вас за советы по часовым поясам! – Mdd

0

Я думаю, что вы хотите

function some_within_three_days(store) { 
    var three_days_ago = moment().subtract(3, 'days'); 
    function within_three_days(date) { return moment(date) . isAfter(three_days_ago); } 
    return Object.keys(store) . some(within_three_days); 
} 

или что-то подобное в зависимости от ваших конкретных требований.

+0

Спасибо. Я попробую это. Я испробовал вопрос с разъяснением того, почему я пытаюсь найти объекты в магазине, которые относятся к последним 3 дням. – Mdd

Смежные вопросы