Реализация выбора времени и даты для бронирования

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Реализация выбора времени и даты для бронирования
Простая
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Реализация выбора времени и даты для бронирования

Выбор времени и даты — двухшаговый UI: сначала дата в календаре, затем доступные временные слоты. Ключевые требования: отображение только реально свободного времени, обновление в реальном времени при одновременных бронированиях, корректная работа с часовыми поясами.

Временные слоты

function TimeSlotPicker({ resourceId, date, onSelect }: Props) {
  const { data: slots, isLoading } = useQuery({
    queryKey: ['slots', resourceId, format(date, 'yyyy-MM-dd')],
    queryFn:  () => fetchTimeSlots(resourceId, date),
  });

  if (isLoading) return <SlotsSkeleton />;

  const grouped = groupBy(slots, slot =>
    slot.datetime.getHours() < 13 ? 'morning' : 'afternoon'
  );

  return (
    <div className="space-y-4">
      {grouped.morning && (
        <div>
          <p className="text-sm text-gray-500 mb-2">Утро</p>
          <div className="grid grid-cols-4 gap-2">
            {grouped.morning.map(slot => (
              <button
                key={slot.id}
                disabled={!slot.available}
                onClick={() => onSelect(slot)}
                className={cn(
                  'py-2 rounded-lg text-sm border transition',
                  slot.available
                    ? 'border-blue-200 hover:bg-blue-50 hover:border-blue-500'
                    : 'border-gray-100 text-gray-300 cursor-not-allowed'
                )}
              >
                {format(slot.datetime, 'HH:mm')}
              </button>
            ))}
          </div>
        </div>
      )}
    </div>
  );
}

Часовые пояса

Сервер хранит время в UTC. Клиент отображает в локальном времени пользователя:

// Конвертация серверного UTC в локальное время пользователя
const localSlot = utcToZonedTime(slot.datetime_utc, userTimezone);
const displayTime = format(localSlot, 'HH:mm', { timeZone: userTimezone });

Для мультирегиональных сервисов — явный выбор часового пояса клиентом.

Защита от двойного бронирования

Пессимистическая блокировка: слот временно резервируется на 10 минут при попытке бронирования, снимается при отмене или завершении процесса.

Время реализации: 2–3 рабочих дня.