Le problème que j'ai rencontré est le filtrage de la date dans le backend, lorsque la date est réglée sur 0 heure, 0 minute, 0 seconde, 0 milliseconde dans le serveur de nœuds, elle est réglée en heure ISO. La date actuelle de 0 heure, 0 minute, 0 seconde, 0 milliseconde du client peut donc varier, ce qui peut donner un jour après ou avant en raison de la conversion de l'heure ISO en fuseau horaire local.
Je les ai corrigés en envoyant l'heure locale du client au serveur.
// If client is from Asia/Kathmandu timezone it will zero time in that zone.
// Note ISODate time with zero time is not equal to above mention
const timeFromClient = new Date(new Date().setHours(0,0,0,0)).getTime()
Et utilisé cette fois pour filtrer les documents en utilisant cette requête
const getDateQuery = (filterBy, time) => {
const today = new Date(time);
const tomorrow = new Date(today.getDate() + 1);
switch(filterBy) {
case 'past':
return {
$exists: true,
$lt: today,
};
case 'present':
return {
$exists: true,
$gte: today,
$lt: tomorrow
};
case 'future':
return {
$exists: true,
$gte: tomorrow
};
default:
return {
$exists: true
};
};
};
const users = await UserModel.find({
expiryDate: getDateQuery('past', timeFromClient)
})