Момент Js Как узнать, когда я нахожусь в пределах часа от заданного времени? - PullRequest
0 голосов
/ 01 мая 2020

Я использую Момент. js, чтобы попытаться выяснить, находится ли пользователь в течение часа с запланированного времени отправления. Если они есть, кнопка в пользовательском интерфейсе включена, позволяя им начать свой уход. Так, например, если они должны были уйти в 15:00, то им не следует позволять нажимать кнопку до 13:59, но в 2:00 они должны.

В настоящее время я ' используя для своей функции следующее:

const calculateTime = (depTime: string) => {
  const currentTime = moment();
  const hourBeforeDepartue = moment(depTime).subtract(1, 'hour');
  const isWithinHour = currentTime.isBetween(hourBeforeDepartue, depTime);
  return isWithinHour;
};

Проблема здесь в том, что моя функция возвращает false, когда я тестирую ее с помощью jest:

import { calculateTime } from './calculateTime';
import moment from 'moment';

    describe('Function that determines if the time is within departure range', () => {
          it('Is in the hour of departure', () => {
            const oneHourFromNow = moment()
              .add(1, 'hour')
              .format('H:H');
            console.log(oneHourFromNow);
            const response = calculateTime(oneHourFromNow);
            expect(response).toBe(true);
          });
        });

Я не уверен, почему это возвращая ложь, и я не знаю лучшего способа сделать это. Любая помощь будет оценена!

1 Ответ

0 голосов
/ 07 мая 2020

Я на мгновение схватил плагин. js называется твикс. Этот плагин проверяет, находится ли текущее время между целевым временем отправления и временем за час до него.

import moment from 'moment';
require('twix');

export class Time {
  time: string;
  constructor(time: string) {
    this.time = time;
  }
}

export type DepartureTime = string;

export class CheckTime extends Time {
  public constructor(departureTime: DepartureTime) {
    super(departureTime);
    this.isWithinHour = this.isWithinHour.bind(this);
  }
  private validateTime(departureTime: DepartureTime): boolean {
    return moment(departureTime).isValid();
  }

  public isWithinHour(time: DepartureTime): boolean | null {
    if (!this.validateTime(time)) {
      return null;
    }
    const departureTime = moment(time).format();
    const oneHourPrior = moment(time)
      .subtract(1, 'h')
      .format();
    const timing = moment(oneHourPrior).twix(departureTime);
    return timing.isCurrent();
  }
}
...