Wenn ein Benutzer das heutige Datum auswählt, sollte er die Option erhalten, welche Zeitfenster für heute verfügbar sind. Die Logik zum Deaktivieren der Zeitfenster, die nicht mehr verfügbar sind, funktioniert in localhost ordnungsgemäß, aber sobald die Website bereitgestellt wird, funktioniert die Logik zum Deaktivieren der Zeitfenster, die nicht mehr verfügbar sind, laut IST nicht, sondern gemäß der Weltzeit 5:30 hinter IST.
Im Backend erstelle ich eine Variable namens currDate, die den heutigen Zeitstempel in IST und ein Array mit dem Namen hat inputDateTime, das den IST-Zeitstempel der heutigen Zeit hat (z. B. 9:00, 10:00).
Ich sende beides an das Frontend, wo es verglichen wird ob currDate größer als das Array inputDateTime ist. Wenn inputDateTime kleiner als currDate ist, ist es logisch, dass die Zeit abgelaufen ist und deaktiviert werden sollte. Dies funktioniert in localhost einwandfrei, funktioniert jedoch nach der Bereitstellung nicht mehr, sondern gemäß der Weltzeit. Im Backend habe ich date-fns verwendet, um die Zeit in IST-Zeit umzuwandeln, und dann den Zeitstempel an das Frontend gesendet. Daher sollte keine Notwendigkeit bestehen, den Zeitstempel erneut in IST-Zeit umzuwandeln.
Der Backend-Code lautet wie folgt:
Code: Select all
let { date } = req.params;
console.log(date);
const services = await Service.find({});
const orders = await Order.find({ date: date });
let bookedTime = [];
if (orders.length) {
bookedTime = orders.map((ord) => { return ord.time; });
}
const allTime = ["09:00", "10:00", "11:00", "12:00", "14:00", "15:00", "16:00", "17:00", "19:00", "20:00"];
let inputDateTime = [];
const utcDate = new Date(); // Current UTC time
const timeZone = 'Asia/Kolkata'
// Convert to IST (UTC + 5:30)
const istDate = dateFnsTz.toZonedTime(utcDate, timeZone);
// console.log("backend ist date : ",istDate);
let currDate = istDate.getTime();
for (let j = 0; j < allTime.length; j++) {
let inputDate = new Date(`${date}T${allTime[j]}:00`);
inputDateIST = dateFnsTz.toZonedTime(inputDate, timeZone);
// console.log("backend input dates and time for user :", inputDateIST);
inputDateTime[j] = inputDateIST.getTime();
}
// console.log('currDate in backend:',currDate);
// console.log('inputDateTime in vackend:', inputDateTime);
res.render("orders/newTwo.ejs", {
services,
bookedTime,
date,
allTime,
inputDateTime,
currDate
});
Der Link der Website ist salon-service.vercel.app, sie wird gehostet auf Vercel und ich verwende flatpickr, um das Eingabedatum vom Benutzer zu erhalten.
Frontend-Code mit EJS-Vorlage:
Code: Select all
--Time Gone