PROBLÈME PERSISTANT: Le décalage d'1h persiste malgré les fixes.
ANALYSE COMPLÈTE:
Le types.setTypeParser doit être appliqué AVANT le Pool,
ET l'image Docker doit être rebuild (pas juste restart),
ET les anciens événements doivent être supprimés et resynchronisés.
AJOUTS:
1. scripts/full-diagnosis-timezone.js
- Diagnostic complet du problème
- Test du type parser (Date object vs string)
- Test insertion/lecture PostgreSQL
- Vérification événements réels
- Simulation API response
- Recommandations claires selon le résultat
2. FIX-TIMEZONE-FINAL.md
- Procédure COMPLÈTE étape par étape
- REBUILD obligatoire avec --no-cache
- Suppression événements corrompus
- Resynchronisation Google Calendar
- Vérifications multiples
- Dépannage si problème persiste
- Checklist finale
UTILISATION:
1. Diagnostic:
docker exec notes-todo-app node scripts/full-diagnosis-timezone.js
2. Si parser KO (renvoie Date objects):
docker-compose down
docker-compose build --no-cache notes-app
docker-compose up -d
3. Suppression anciens événements:
docker exec noteflow-postgres psql -U noteflow -d noteflow -p 5499 \
-c "DELETE FROM calendar_events"
4. Resynchroniser depuis interface web
5. Vérifier que heures = Google Calendar
Le diagnostic permettra d'identifier si:
- Le parser n'est pas actif → rebuild nécessaire
- Le parser fonctionne mais anciennes données → suppression nécessaire
- Autre problème → affichage exact du problème
Fichiers:
- scripts/full-diagnosis-timezone.js (nouveau)
- FIX-TIMEZONE-FINAL.md (guide complet)
6.6 KiB
🔧 FIX TIMEZONE CALENDRIER - PROCÉDURE COMPLÈTE
⚠️ IMPORTANT: Cette procédure doit être suivie EXACTEMENT
Le décalage horaire persiste car le changement du parser PostgreSQL nécessite:
- REBUILD de l'image Docker (pas juste restart!)
- SUPPRESSION des événements synchronisés avant le fix
- RESYNCHRONISATION avec Google Calendar
📋 ÉTAPE PAR ÉTAPE (À FAIRE DANS L'ORDRE!)
ÉTAPE 1: Diagnostic initial (optionnel mais recommandé)
docker exec notes-todo-app node scripts/full-diagnosis-timezone.js
Ce script montre:
- Si le parser fonctionne (dates = strings ou objets Date)
- Comment PostgreSQL stocke les dates
- Comment l'API renvoie les dates
- Où se situe exactement le problème
Si le diagnostic dit "Le driver pg renvoie toujours des objets Date": → Le parser n'est PAS actif → Rebuild obligatoire
Si le diagnostic dit "Le parser fonctionne!": → Les anciennes données sont corrompues → Suppression + resync
ÉTAPE 2: REBUILD COMPLET (OBLIGATOIRE!)
# Arrêter les containers
docker-compose down
# Rebuild l'image notes-app
docker-compose build --no-cache notes-app
# Redémarrer tout
docker-compose up -d
⏱️ Durée: 2-3 minutes
Attendez que le serveur soit complètement démarré:
docker-compose logs -f notes-app
Attendez de voir:
✓ Serveur NoteFlow démarré sur le port 2222
Puis appuyez sur Ctrl+C
ÉTAPE 3: Suppression des événements corrompus
docker exec noteflow-postgres psql -U noteflow -d noteflow -p 5499 -c "DELETE FROM calendar_events"
Résultat attendu:
DELETE 15
(ou le nombre d'événements que vous aviez)
⚠️ C'est normal! Les événements seront resynchronisés à l'étape suivante.
ÉTAPE 4: Vérification du parser
docker exec notes-todo-app node scripts/full-diagnosis-timezone.js
Vous devriez maintenant voir:
✅ Le parser fonctionne!
Les dates sont renvoyées comme strings
Si vous voyez encore "objets Date":
→ Le rebuild n'a pas fonctionné
→ Recommencez l'ÉTAPE 2 avec --no-cache
ÉTAPE 5: Resynchronisation Google Calendar
- Ouvrez http://localhost:2222
- Connectez-vous
- Allez dans Admin → Google Calendar
- Cliquez sur 🔄 Synchroniser
Résultat attendu:
15 événements synchronisés
ÉTAPE 6: VÉRIFICATION FINALE
Dans la box Rendez-vous sur la page d'accueil:
Comparez avec Google Calendar:
| Google Calendar | NoteFlow (avant) | NoteFlow (après) |
|---|---|---|
| 10:00 | 11:00 ❌ | 10:00 ✅ |
| 14:30 | 15:30 ❌ | 14:30 ✅ |
| 09:15 | 10:15 ❌ | 09:15 ✅ |
Les heures doivent être IDENTIQUES!
🔍 SI LE PROBLÈME PERSISTE
Test 1: Vérifier que le rebuild a bien été fait
# Voir la date de build de l'image
docker images | grep noteflow
# Vérifier les logs du build
docker-compose build notes-app 2>&1 | grep "types.setTypeParser"
Test 2: Vérifier manuellement une date
docker exec noteflow-postgres psql -U noteflow -d noteflow -p 5499 -c "
SELECT
title,
start_time,
start_time AT TIME ZONE 'Europe/Paris' as heure_paris
FROM calendar_events
ORDER BY start_time ASC
LIMIT 1;
"
Comparez heure_paris avec l'heure dans Google Calendar.
Test 3: Test direct JavaScript
docker exec notes-todo-app node -e "
const { Pool } = require('pg');
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
pool.query('SELECT start_time FROM calendar_events LIMIT 1')
.then(r => {
const val = r.rows[0]?.start_time;
console.log('Type:', typeof val);
console.log('Value:', val);
if (typeof val === 'string') {
console.log('✅ Parser OK - String');
} else {
console.log('❌ Parser KO - Objet Date');
}
pool.end();
});
"
🆘 DÉPANNAGE
Problème: "Le parser renvoie toujours des objets Date"
Cause: Le rebuild n'a pas pris en compte les changements
Solution:
docker-compose down
docker system prune -f
docker-compose build --no-cache --pull notes-app
docker-compose up -d
Problème: "Les heures sont toujours décalées après resync"
Cause: Cache navigateur
Solution:
- Ouvrez les DevTools (F12)
- Onglet Network → Cocher Disable cache
- Actualisez la page (Ctrl+F5 ou Cmd+Shift+R)
- Videz le cache navigateur:
- Chrome: Ctrl+Shift+Del
- Firefox: Ctrl+Shift+Del
- Edge: Ctrl+Shift+Del
Problème: "Certains événements corrects, d'autres décalés"
Cause: Mélange d'événements avant/après le fix
Solution:
# Supprimer TOUS les événements
docker exec noteflow-postgres psql -U noteflow -d noteflow -p 5499 -c "DELETE FROM calendar_events"
# Resynchroniser
# (depuis l'interface web)
✅ CHECKLIST FINALE
Cochez quand fait:
- ÉTAPE 1: Diagnostic initial effectué
- ÉTAPE 2: Rebuild complet avec
--no-cache - ÉTAPE 3: Événements supprimés (DELETE FROM)
- ÉTAPE 4: Diagnostic confirme "parser OK"
- ÉTAPE 5: Google Calendar resynchronisé
- ÉTAPE 6: Heures vérifiées = identiques à Google
- Cache navigateur vidé (Ctrl+F5)
- Aucun décalage horaire observé
🎯 RÉSUMÉ EN 4 COMMANDES
# 1. Rebuild complet
docker-compose down && docker-compose build --no-cache notes-app && docker-compose up -d
# 2. Attendre 30s
sleep 30
# 3. Supprimer événements
docker exec noteflow-postgres psql -U noteflow -d noteflow -p 5499 -c "DELETE FROM calendar_events"
# 4. Puis resynchroniser Google Calendar depuis l'interface web
📊 POURQUOI CE FIX FONCTIONNE
Avant (cassé):
PostgreSQL → driver pg parse en Date object → décalage timezone
Après (corrigé):
PostgreSQL → driver pg renvoie string ISO → frontend parse avec bon timezone
La clé: types.setTypeParser(1184, str => str)
Ce parser transforme les TIMESTAMPTZ PostgreSQL en strings ISO au lieu d'objets Date, ce qui permet au frontend de gérer correctement le timezone avec timeZone: 'Europe/Paris'.
Commit: 1a68d87 - Fix: Désactivation parsing Date PostgreSQL
Date: 2025-11-14
Si vous suivez cette procédure EXACTEMENT, le problème SERA résolu! 🎉