DateTime funktioniert ordnungsgemäß in localhost, funktioniert jedoch nach der Bereitstellung nicht ordnungsgemäß, selbsJavaScript

Javascript-Forum
Guest
 DateTime funktioniert ordnungsgemäß in localhost, funktioniert jedoch nach der Bereitstellung nicht ordnungsgemäß, selbs

Post by Guest »

Ich verwende Node JS für das Backend und EJS-Vorlage für mein Frontend. Im Grunde erstelle ich ein Salon-Terminsystem, bei dem Benutzer ein Datum auswählen und auf der Grundlage des ausgewählten Datums im nächsten Formular die für dieses Datum verfügbaren Zeitfenster erhalten. Außerdem habe ich die Zeitfenster deaktiviert, die am heutigen Tag vergangen sind.
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 Frontend-Code, in dem ich den Zeitstempel currDate mit Array-Elementen inputDateTime vergleiche (die im Grunde die Terminzeiten sind). Gemäß der definierten Logik sollten die Zeitfenster, die kleiner als das Zeitfenster currDate sind, deaktiviert werden. Aber diese Logik zum Deaktivieren der Zeitfenster funktioniert nach der Bereitstellung der Website nicht.
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






Ich versuche schon seit einiger Zeit, das Problem zu beheben, kann es aber nicht beheben. Ich kann nicht herausfinden, was mir fehlt. Wir freuen uns über jede Hilfe.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post