2009-04-19 7 views
0

Sur un serveur Win2k, en utilisant une pile WAPP (Windows, Apache, PostgreSQL, PHP). Exécuter une application web PHP. Également testé en utilisant la console interactive PHP.Problème de fuseau horaire PHP 5.2 Windows (pile WAPP)

Le datetime est rapporté correctement, mais pour une raison étrange le fuseau horaire est rapporté de manière incorrecte:

php -a 
<?php 
echo date('c'); 
2009-04-19T16:52:35-04:00 

C:\WAPP\php>time /t 
17:06 

C:\WAPP\php>date /t 
Sun 04/19/2009 

fuseau horaire OS du serveur est effectivement mis à GMT-5. J'ai utilisé un correctif DST (non officiel) et j'ai également essayé d'utiliser l'extension php_timezonedb.dll, mais le problème persiste.

Ce serveur exécute également d'autres applications (pas sous mon contrôle), donc je ne peux pas simplement changer l'heure. Je pourrais aussi temporairement mettre tout le monde à GMT-4 dans l'application PHP, mais je pense qu'il devrait y avoir une solution moins hackish.

Est-ce que quelqu'un a des suggestions ou peut donner une explication plus détaillée de ce qui se passe? Je soupçonne que cela a quelque chose à voir avec les récents changements dans DST et Windows, et cela provoque PHP à détecter le fuseau horaire de façon incorrecte.

Répondre

0

Si vous n'avez pas accès au fichier php.ini (vous pouvez y définir le fuseau horaire du serveur), vous devrez définir le fuseau horaire dans le script.

2

Vous pouvez éviter beaucoup des fuseaux horaires des questions liées à l'aide:

gmdate (string $format [, int $timestamp ]); 

Il est identique à la fonction date() sauf que le temps de retour est en GMT (Greenwich Mean Time).

0

Vous pouvez définir le fuseau horaire utilisé par php en définissant la variable php date.timezone dans un fichier .htaccess dans le répertoire de l'application.

php_value date.timezone "America/Bahia" 
0

Vous devez définir le fuseau horaire (soit à partir du php.ini ou avec date_default_timezone_set())

Je devine que si vous activez la notification d'erreur stricte, vous obtiendrez une erreur de ne pas régler la fuseau horaire par défaut.

Chaque appel à une fonction date/heure générera un E_NOTICE si le fuseau horaire n'est pas valide, et/ou un message E_STRICT si vous utilisez les paramètres du système ou la variable d'environnement TZ. Voir aussi date_default_timezone_set()

Questions connexes