31,029
edits
Tag: 2017 source edit |
Tag: 2017 source edit |
||
| Line 399: | Line 399: | ||
Dolibarr se veut une application multi-utilisateur et multi-localisation. Il convient donc de stocker les dates dans le bon format. Pour éviter les problèmes de conversion, les règles suivantes doivent être appliquées: | Dolibarr se veut une application multi-utilisateur et multi-localisation. Il convient donc de stocker les dates dans le bon format. Pour éviter les problèmes de conversion, les règles suivantes doivent être appliquées: | ||
*Une date en mémoire doit être au format Timestamp GMT. | *Une date en mémoire doit être au format Timestamp UTC/GMT. | ||
*Une date stockée en base de données | *Une date stockée en base de données est soumise dans la requête via la date en mémoire (donc UTC/GMT) corrigé avec le timestamp en heure <b>locale du serveur PHP</b> (Cette conversion est assuré par $db->idate). Cela ne concerne pas les dates mises à jour automatiquement par la base (champ '''tms''' en base). Inversement quand on lit une date, qui est reçu en chaine pour le timezone du serveur PHP, elle est convertie en heure UTC par $db->jdate. | ||
Ainsi le 1er janvier 1970, 3 heures à Paris (TZ=+1) = 1er janvier 1970, 2 heures à Greenwich (TZ=0) sera stocké en mémoire par 7200 et sera soumis à la base de données avec la chaine '19700101030000' (PHP convertit en heure de son TZ et la base déconvertit avec son TZ qui est le même que celui de PHP). | Ainsi le 1er janvier 1970, 3 heures à Paris (TZ=+1) = 1er janvier 1970, 2 heures à UTC/Greenwich (TZ=0) sera stocké en mémoire par 7200 et sera soumis à la base de données avec la chaine '19700101030000' (PHP convertit en heure de son TZ et la base déconvertit avec son TZ qui est le même que celui de PHP). | ||
Les méthodes select doivent donc traduire les champs dates lus qui sont au format chaine TZ de la base ('19700101030000') par appel de la méthode db->jdate afin de récupérer une information en mémoire au format Timestamp GMT. Et les méthodes insert doivent lors de la génération de la requête convertir la date mémoire connue en variable, par la méthode db->idate (Voir exemples générés par le squelette). | Les méthodes select doivent donc traduire les champs dates lus qui sont au format chaine TZ de la base ('19700101030000') par appel de la méthode db->jdate afin de récupérer une information en mémoire au format Timestamp GMT. Et les méthodes insert doivent lors de la génération de la requête convertir la date mémoire connue en variable, par la méthode db->idate (Voir exemples générés par le squelette). | ||