• Фильтр по датам?

    Вы можете воспользоваться библиотекой Moment.js. Тогда расчет искомых дат будет происходить примерно следующим образом:

    moment().subtract(1, 'month').toDate() // -1 месяц
    moment().subtract(1, 'week').toDate()
    moment().subtract(1, 'day').toDate()


    Нативными средствами можно рассчитать следующим образом:

    const sub1month = new Date();
    sub1month.setMonth(sub1month.getMonth() - 1);
    sub1month // -1 месяц
    
    const sub1week = new Date();
    sub1week.setDate(sub1week.getDate() - 7);
    sub1week // -1 неделя
    
    const sub1day = new Date();
    sub1day.setDate(sub1day.getDate() - 1);
    sub1day // -1 день


    Обратите внимание что методы setDate и setMonth являются мутабельными, и возвращают таймштамп.
    Ответ написан
    1 комментарий
  • Как можно обработать закрытие модалок HAPI.UI.show*?

    movl
    @movl Автор вопроса
    Опишу, в общем, как я поборол описанные мной же проблемы с API Одноклассников, вдруг поможет кому. Решение несколько сомнительные, но мне помогли повысить отзывчивость интерфейса и позволили правильно собирать статистику.

    Крестик:
    По клику на кнопку, вызывающей виралку, на window вещаю событие mousemove, вещать нужно по истечению некоторого таймаута, у меня это 500мс, потому что окно может открыться не сразу. Если окно даже и было открыто, а после чего сразу же закрыто, по клику на пустую область, например, событие все равно словится по истечению таймайту и его можно будет корректно обработать. С платежками в этом плане все немного сложнее, так как там не приходит событие о успешной транзакции, при клике на крестик, несмотря на то, что она была совершена, здесь пришлось проверять через сервер. Тут еще такой момент, пока тестировал, события ответа от модалки, приходили гарантировано раньше, чем событие движения мышки, что собственно и позволило сделать такой костыль.

    Частота поднятия модалок:
    При частых попытках поднять модалку, бывает что окно не всегда открывается, что отловить невозможно. Эмпирическим путем выявил, что максимально необходимый таймаут после последнего закрытия(!) API окна это 2500мс. В итоге пришел к решению, где все вызовы оборачиваются в очередь, и в случае клика на кнопку, дергающую API, пока таймаут не истек, на оставшееся время таймаута блокирую интерфейс, с просьбой немного подождать, после чего уже реально вызываю метод API.
    Ответ написан
    Комментировать