Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'fix/date-field-manage-timezone' into doryphore-dev
- Loading branch information
Showing
6 changed files
with
126 additions
and
36 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
<?php | ||
|
||
namespace YesWiki\Core\Service; | ||
|
||
use DateInterval; | ||
use DateTimeImmutable; | ||
use DateTimeZone; | ||
use Exception; | ||
|
||
class DateService | ||
{ | ||
public function __construct( | ||
) { | ||
} | ||
|
||
|
||
public function getDateTimeWithRightTimeZone(string $date): DateTimeImmutable | ||
{ | ||
$dateObj = new DateTimeImmutable($date); | ||
if (!$dateObj){ | ||
throw new Exception("date '$date' can not be converted to DateImmutable !"); | ||
} | ||
// retrieve right TimeZone from parameters | ||
$defaultTimeZone = new DateTimeZone(date_default_timezone_get()); | ||
if (!$defaultTimeZone){ | ||
$defaultTimeZone = new DateTimeZone('GMT'); | ||
} | ||
$newDate = $dateObj->setTimeZone($defaultTimeZone); | ||
$anchor = '+00:00'; | ||
if (substr($date,-strlen($anchor)) == $anchor){ | ||
// it could be an error | ||
$offsetToGmt = $defaultTimeZone->getOffset($newDate); | ||
// be careful to offset time because time is changed by setTimeZone | ||
$offSetAbs = abs($offsetToGmt); | ||
return ($offsetToGmt == 0) | ||
? $newDate | ||
: ( | ||
$offsetToGmt > 0 | ||
? $newDate->sub(new DateInterval("PT{$offSetAbs}S")) | ||
: $newDate->add(new DateInterval("PT{$offSetAbs}S")) | ||
); | ||
} | ||
return $newDate; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
d86f51a
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@mrflos je reviens sur ce commit qui corrige un souci introduit par 5a0cefa
Avant 5a0cefa, la valeur par défaut était
GMT
, ce qui faisait que le fuseau horaire utilisé était celui du serveurphp
(même si le serveur était enEurope/Paris
).Après ce commit, si l'usager mettait
Europe/Paris
alors le fuseau horaire utilisé était celui du serveur (par exempleGMT
).Le présent commit ne fait que corriger ceci est aussi prendre en compte que certaines dates pourraient avoir été enregistrées avec le fuseau horaire
+00:00
(GMT
) alors que le besoin est qu'elles devraient être enregistrées avec le fuseau horaire du site ex. :+02:00
(Europe/Paris
).Ceci pose en particulier un souci pour le template dynamique
calendar.twig
et ceci a été corrigé pour que les heures affichées correspondent bien à celles du fuseau horaire du serveur (comportement attendu par défaut lors de l'édition d'une fiche)Rien n'a été ajouté pour faire référence à une éventuelle extension externe.
Le service
DateService
a été créé pour partager la fonction de correction du fuseau horaire avec leIcalFormatter
car celui-ci aussi a besoin de faire attention aux décalages introduits par erreur.Juste que le fuseau horaire du serveur est passé au javascript via
wiki.timezone
pour que le templatecalendar
sache dans quel fuseau horaire il faut afficher les heures.d86f51a
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, merci pour la précision, en tout cas mon commit initial avait pour objectif de mettre la valeur par défaut des dates dans YesWiki sur
Europe/Paris
car souvent les serveurs ne sont pas configuré, et que la communauté s'attendait a avoir les dates saisie sur le créneau francais, sauf changement dans la conf.Si cela respecte ce fonctionnement, ca va, si cela remet GMT par defaut, c'est pas bon.
d86f51a
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Avec le correctif que j'ai fait, tout est rentré dans l'ordre normalement (aux effets de bord près, mais je vais rester vigilant aux remarques sur le sujet, comme pour les serveurs qui étaient explicitement en
UTC
et qui changeraient volontairement de fuseau àEurope/Paris
, il est possible que les évènements déjà enregistrés soient décalées de 2h d'un coup, ... ).