1.1.10 • Published 4 days ago

@webresto/worktime v1.1.10

Weekly downloads
-
License
MIT
Repository
github
Last release
4 days ago

Worktime

Library for working with working hours restrictions

Installation

npm i @webresto/worktime

Example

Import

import { WorkTimeValidator,TimeZoneIdentifier } from '@webresto/worktime'

In your code:

const currentDate = new Date(); //текущие локальные дата/время пользователя
const restriction:Restrictions = .... ; // объект restriction, полученный от API

const maxOrderDate = WorkTimeValidator.getMaxOrderDate(restriction,currentdate); //максимальная доступная дата доставки
if (WorkTimeValidator.isWorkNow(restriction, currentdate).workNow) {
  ... // сейчас рабочее время предприятия, доставка на ближайшее время доступна
} else {
  ... // Доставка на ближайшее время не доступна.
      // Для доставки курьером:
  const buffer = WorkTimeValidator.getPossibleDelieveryOrderDateTime(restriction, currentdate);
  const [date,time] = buffer.split(' ');

      // Для самовывоза:
  const buffer = WorkTimeValidator.getPossibleSelfServiceOrderDateTime(restriction, currentdate);
  const [date,time] = buffer.split(' ');
}

API

Интерфейсы:

/**
 * Базовые данные о времени работы - служебный интерфейс.
 */
interface WorkTimeBase {
    /** время начала рабочего дня*/
    start: string;
    /** время окончания рабочего дня*/
    stop: string;
    /** перерыв на обед*/
    break: string;
}
/**
 * Информация о времени работы предприятия - служебный интерфейс.
 */
interface WorkTime extends WorkTimeBase {
    /** день недели, к которому применяется это время доставки   */
    dayOfWeek: string | string[];
}
/**
 * Интерфейс объекта, получаемого от API @webresto/core и содержащего текущие данные о рабочем времени предприятия
 */
interface Restrictions {
    /** минимальное время доставки*/
    minDeliveryTime: string;
    /**установлено ли на текущий момент ограничение доставки на определенное время */
    deliveryToTimeEnabled?: boolean;
    /** ограничение максимальной даты заказа в будущем (в минутах)*/
    periodPossibleForOrder: number;
    /** временная зона предприятия */
    timezone: string;
    /**  массив ограничений по времени работы предприятия для разных дней недели. */
    workTime: WorkTime[];
}

Классы:

/**
 * Класс, содержащий статические методы, необходимые для работы с ограничениями рабочего времени предприятия.
 * Создавать новый объект этого класса для использования методов не требуется.
 */
class WorkTimeValidator {

    /**
     * Метод возвращает максимальную возможную дату, на которую можно заказать доставку.
     * @param restriction - объект, содержащий информацию о рабочем времени предприятия и ограничениях даты/времени доставки.
     * @return :string - Строка, представляющая максимальную доступную дату доставки в формате yyyy-MM-dd.
     */
    static getMaxOrderDate(restriction: Restrictions, currentdate: Date): string;

    /**
     * Метод считает, сколько минут от начала дня (00:00) прошло для переданного времени.
     * @param time - строка в формате HH:mm - время.
     * @return :number - кол-во минут.
     */
    static getTimeFromString(time: string): number;
    /**
     * Метод проверяет, доступна ли возможность доставки на ближайшее время.
     * @param restriction - объект, содержащий информацию о рабочем времени предприятия и ограничениях даты/времени доставки.
     * @param currentdate - объект Date, представляющий локальные дату и время пользователя, для которых и проверяется возможность доставки
     * @return Обьект, содержащий информацию:
     * {
     *    isWorkNow:boolean - Возможна ли доставка в ближайшее время
     *    isNewDay:boolean - Служебный параметр для внутреннего использования.
     *      Представляет признак, что из-за разницы часовых поясов расчет даты "перепрыгнул" на новый день.
     *    currentTime:number - Служебный параметр для внутреннего использования.
     *      Представляет проверяемое методом время в минутах от 00:00 в часовом поясе предприятия.
     *    curentDayStartTime:number - Служебный параметр для внутреннего использования.
     *      Представляет время начала рабочего дня в минутах от 00:00 в часовом поясе предприятия.
     *    curentDayStopTime:number - Служебный параметр для внутреннего использования.
     *     Представляет время окончания рабочего дня в минутах от 00:00 в часовом поясе предприятия.
        }
     */
    static isWorkNow(restriction: Restrictions, currentdate: Date): {
        workNow: boolean;
        isNewDay: boolean;
        currentTime: number;
        curentDayStartTime: number;
        curentDayStopTime: number;
    };

    /**
     * Метод возвращает ближайшую возможную дату-время заказа для способа доставки "Доставка курьером".
     * @param restriction - объект, содержащий информацию о рабочем времени предприятия и ограничениях даты/времени доставки.
     * @param currentdate - объект Date, представляющий текущие локальные дату и время пользователя
     */
    static getPossibleDelieveryOrderDateTime(restriction: Restrictions, currentdate: Date): string;

    /**
     * Метод возвращает ближайшую возможную дату-время заказа для способа доставки "Самовывоз".
     * @param restriction - объект, содержащий информацию о рабочем времени предприятия и ограничениях даты/времени доставки.
     * @param currentdate - объект Date, представляющий текущие локальные дату и время пользователя
     */
    static getPossibleSelfServiceOrderDateTime(restriction: Restrictions, currentdate: Date): string;

    /**
    * Метод возвращает актуальные данные о времени работы из массива всех вариантов обьекта restriction.
    * @param restriction - объект, содержащий информацию о рабочем времени предприятия и ограничениях даты/времени доставки.
    * @param currentdate - объект Date, представляющий текущие локальные дату и время пользователя
    */
    static getCurrentWorkTime(restriction: Restrictions, currentdate: Date): WorkTime;
}

/**
 * Класс, содержащий статический метод, определяющий смещение часового пояса относительно GMT (+00:00) по переданной строке с названием таймзоны.
 * Создавать новый объект этого класса для использования метода не требуется.
 */
class TimeZoneIdentifier {
  /**
 *  Метод определяет смещение часового пояса относительно GMT (+00:00) по переданной строке с названием таймзоны.
 *  @param zone - Строка с названием таймзоны ( например 'America/New_York').
 *  @return  - Строка, представляющая смещение относительно GMT.
 *
 *  Пример :
 *   const offset = TimeZoneIdentifier.getTimeZoneGMTOffset('Europe/Moscow');
 *   console.log(offset) /// "+03:00"
 */
  static getTimeZoneGMTOffset(zone: string): string;
}

Пример, как выбрать таймзону:

const d = new Date("2020-04-13T00:00:00.000+08:00");
console.log(
    d.toLocaleString('en-US', { timeZone: 'America/New_York' })
); /// 4/12/2020, 12:00:00 PM
2.0.0-build.2

4 days ago

1.1.10

5 days ago

2.0.0-build.1

4 days ago

2.0.0-dev.0

5 days ago

1.1.9

7 days ago

1.1.8

3 months ago

1.1.7

7 months ago

1.1.1

1 year ago

1.0.17

1 year ago

1.0.16

1 year ago

1.1.3-alpha

1 year ago

1.1.2

1 year ago

1.1.5-beta

11 months ago

1.1.1-alpha

1 year ago

1.1.1-beta

1 year ago

1.1.4-beta

11 months ago

1.1.3-beta

1 year ago

1.0.15

1 year ago

1.0.14

1 year ago

1.1.6-beta

11 months ago

1.1.0-alpha

1 year ago

1.0.13

2 years ago

1.0.12

3 years ago

1.0.11

3 years ago

1.0.10

3 years ago

1.0.9

3 years ago

1.0.8

3 years ago

1.0.7

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago