web-dev-qa-db-fra.com

obtenir l'heure du serveur en php - problèmes de fuseau horaire

sur Shell, l'heure de mon serveur est la suivante (simple date dans bash): dim. 29 août 10:37:12 EDT 2010

quand j'exécute le code php -r "echo date('Y-m-d H:i:s');" je reçois: 2010-08-29 10:37:10

mais quand j'exécute un script php qui a echo date('Y-m-d H:i:s');, je reçois une heure différente, puisque php pense que le fuseau horaire est au format UTC (l'heure du serveur correspond à l'heure avancée de l'Est).

Mon fichier php.ini n'a pas de fuseau horaire et je ne voudrais rien changer car je n'ai aucune idée de l'impact que cela aurait sur d'autres sites tournant sur ce serveur.

Existe-t-il un moyen simple d'obtenir l'heure du serveur, dans le fuseau horaire défini pour le serveur?

19
azv

Selon les directives php.ini page de manuel, le fuseau horaire n'est pas défini par défaut si vous utilisez une version antérieure à 5.3. Ensuite, si vous regardez la page pour date_default_timezone_get , il utilise l'ordre suivant pour obtenir le fuseau horaire:

* Reading the timezone set using the date_default_timezone_set() function (if any)
* Reading the TZ environment variable (if non empty) (Prior to PHP 5.3.0)
* Reading the value of the date.timezone ini option (if set)
* Querying the Host operating system (if supported and allowed by the OS)

UTC est la valeur par défaut si toutes ces solutions échouent. C'est donc probablement un bon point de départ.

14
Daniel Vandersluis

Le serveur doit toujours avoir un fuseau horaire spécifié dans le fichier php.ini. PHP 5.3 émet même des avis si ce n'est pas le cas et l'extension DateTime lève des exceptions si vous essayez de construire des objets sans spécifier explicitement un fuseau horaire (avec un objet DateTimezone) ou en ayant un par défaut (via date.timezone ou date_default_timezone_set).

Selon ce que vous décrivez, les scénarios les plus probables sont les suivants:

  • Différents fichiers php.ini sont utilisés dans les deux scénarios. Dans le premier cas, aucun fuseau horaire par défaut n'est spécifié. Ainsi, PHP tente d'inférer l'un à partir du fuseau horaire système de la machine.
  • Le (deuxième) script appelle date_default_timezone_set('UTC') ou son équivalent.
2
Artefacto

En retard pour la fête, mais si vous souhaitez définir le fuseau horaire sans modifier php.ini, vous pouvez insérer dans le code php l'une des chaînes suivantes:

date_default_timezone_set('GMT');
date_default_timezone_set('Europe/Zurich');
date_default_timezone_set('America/New_York');
2
pascalbrax

Avez-vous essayé d’utiliser date_default_timezone_set () Les fuseaux horaires américains sont disponibles ici http://www.php.net/manual/en/timezones.america.php

0
Shaun Hare