Поэтому я пытаюсь осуществить бронирование (резервирование) на веб-сайте, который предлагает онлайн-услуги, и я хочу, чтобы даты и время (рабочие дни и часы) для конечного пользователя отображались правильно с учетом часовых поясов, летнего времени ии все эти хитрые вещи.Фактическое местонахождение поставщиков услуг находится в часовом поясе +5, а рабочее время с 8:00 до 17:00.Итак, что я хочу, чтобы фактический пользователь, например, в часовом поясе +4, видел рабочие часы с 7:00 до 16:00.
В настоящее время я использую Angular Material Datepicker для хранения дат и Angular Material Selectс жестко закодированными часами.

Но это совсем не оптимально, и я мог только сойти с ума, уведомив пользователей, что показанное время имеет указанный часовой пояс.
Я также пытался следовать этому руководству , но безрезультатно.
Я установил момент и момент-время, но пока не могу понять.
Я сохраняю забронированные даты и часы в базе данных и извлекаю их с помощью angular / fire, например,
table: Table;
this.db.list('timetable').valueChanges()
.subscribe(table => this.table = table);
Затем я беру значение из ввода DatePicker и проверяю, какие рабочие часы доступны
selectedDate: string;
hours = hours; // a list of objects with hardcoded working hours in it, like {hour: "8:00", booked: false}, {hour: "9:00", booked: true} etc.
selectDate(e: MatDatepickerInputEvent<Date>) {
this.selectedDate = new Date(e.target.value).toLocaleDateString();
const bookedHours: string[] = [];
this.table.forEach((booking) => {
if (this.selectedDate === booking.date) {
bookedHours.push(booking.hour);
}
});
this.hours.forEach(time => {
if (bookedHours.includes(time.hour)) {time.booked = true;
} else { time.booked = false; }
});
}
И если, например, 10 утра забронировано, это выглядит так: 
Я знаю, что реализация плохая и хакерская, и я открыт для предложений по этому вопросу.