---
name: feedback-timezone-lastday
description: "Ne jamais utiliser .toISOString().split('T')[0] pour calculer une date locale — provoque un décalage d'un jour en UTC+1"
metadata: 
  node_type: memory
  type: feedback
  originSessionId: 2aaa93e3-eec2-479c-892a-d5ce8371a99f
---

Ne jamais calculer le dernier jour d'un mois avec `.toISOString().split('T')[0]`.

**Why:** `new Date(annee, m, 0).toISOString()` convertit en UTC. En France (UTC+1 en hiver), minuit local le 31 déc. = 23h le 30 déc. UTC → la chaîne retournée est `"2024-12-30"` au lieu de `"2024-12-31"`. Les investissements souscrits le dernier jour du mois sont alors exclus à tort des calculs de capital mensuel dans le dashboard.

**How to apply:** Toujours utiliser les méthodes locales pour construire une chaîne de date :

```js
// ❌ À éviter
const lastDay = new Date(annee, m, 0).toISOString().split('T')[0];

// ✅ Correct
const _d = new Date(annee, m, 0);
const lastDay = `${_d.getFullYear()}-${String(_d.getMonth() + 1).padStart(2, '0')}-${String(_d.getDate()).padStart(2, '0')}`;
```

Appliquer ce pattern partout où une date locale est formatée en chaîne `YYYY-MM-DD` à partir d'un objet `Date`. Déjà corrigé dans `backend/src/routes/dashboard.js` (capitalMensuel de `/api/dashboard/interets-par-plateforme`).
