Bonjour,
Je fais des imports des absences en utilisant l’import ICS.
L’import fonctionne correctement mais l’heure de la colonne ‘Demande’ ainsi que celle de la colonne ‘Etat’ est décalée d’une heure (+1) alors que les heures d’absences (colonnes début et fin) sont correctes.
Dans les fichiers ICS, l’heure est en UTC, PHP est bien défini avec une timezone ‘Europe/Paris’.
Je fais actuellement des tests dans la version 26.10 mais j’ai le cas aussi dans les versions précédentes.
Qu’est ce qui pourrait expliquer ce phénomène?
Merci
Bonjour,
Si l’heure est en UTC dans le fichier ICS, le décalage d’une heure entre la valeur affichée dans le fichier ICS et celle affichée dans Planno est normal.
Comment est affichée l’heure dans le fichier ICS ?
Si elle se termine par Z, c’est le temps UTC. Sinon, le timezone est défini en début de ligne.
Par exemple, j’ai les valeurs suivantes, elles sont UTC :
CREATED:20261027T151105Z LAST-MODIFIED:20261027T151118Z
Dans Planno avec le timezone Europe/Paris, elles deviennent 16h11
Cordialement,
Jérôme
Bonjour,
Dans le fichier ICS, j’ai les valeurs suivantes :
DTSTART:20260803T110000Z
DTEND:20260803T160000Z
DTSTAMP:20261028T083001Z
Dans Planno,
La date de début de l’absence est 03/08/2026 12h00 –>ok
La date de fin de l’absence est 03/08/2026 17h00 –>ok
La date de la demande est 28/10/2026 à 10h30 alors qu’elle devrait être à 9h30.
Cordialement,
La date de demande est générée depuis l’attribut « CREATED » s’il existe, sinon « LAST-MODIFIED » est utilisé.
IL n’y a aucun de ses deux attributs dans le fichier ICS.
Dans ce cas, c’est la date de l’import qui est utilisée (date d’exécution du script).
Qu’est ce qui peut expliquer dans ce cas que cette date soit décalée d’une heure par rapport à l’heure réelle de l’exécution du script?
Le script s’exécute en CLI, la configuration PHP de CLI peut être différente de la configuration PHP Web, chacun peut avoir son propre fichier php.ini.
Le timezone est peut-être incorrecte en CLI.
Vous pouvez exécuter cette commande pour le vérifier :
php -r "var_dump(date_default_timezone_get());"
J’ai modifié les 2 fichiers php.ini.
Le résultat de la commande me donne bien : string(12) « Europe/Paris »
Cordialement,
Je pense avoir trouvé.
Dans le fichier legacy/Class/class.ics.php,
Remplacez la ligne 214
$now = date('Ymd\THis\Z'); // Current time
Par
$now = new DateTimeImmutable(null, new DateTimeZone('UTC')); // Current time
Relancez un import et dites-moi si l’heure de demande correspond bien à l’heure d’import.
Merci,
Bonjour,
J’ai appliqué la modification mais au lancement de l’import, j’obtiens cette erreur :
In class.ics.php line 312:
Object of class DateTimeImmutable could not be converted to string
Cordialement,
Bonjour,
Essayez ceci :
$now = (new DateTimeImmutable('', new DateTimeZone('UTC')))->format('Ymd\THis\Z'); // Current time"
Merci,
C’est bon, l’heure est maintenant correcte.
Merci,
Cordialement,
Merci,
je vais ajouter ce correctif pour les prochaines versions.
@veronique, quel logiciel fournit vos flux ICS ?
Le fait que les attributs CREATED et LAST-MODIFIED sont manquants peut être gênant.
Planno compense comme il peut en remplaçant ces informations avec la date d’exécution du script.
Les conséquences sont les suivantes :
1. le décalage entre la date de création réelle et la date d’import car CREATED n’existe pas
2. les modifications sont gérées par ajout/suppression car LAST-MODIFIED n’existe pas (quand LAST-MODIFIED existe, les absences sont proprement modifiées lorsque la date évolue).
Les 2 cumulés font que la date de création de l’absence est remplacée à chaque exécution du script.
Si vous avez la main sur la génération des fichiers ICS, je vous conseille d’ajouter ces attributs.
