1.1.10 • Published 4 days ago
@webresto/worktime v1.1.10
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