2009-06-25 8 views
4

En travaillant sur une mise à jour de l'interface utilisateur pour un client, j'ai remarqué que les dates associées à tous les articles étaient dépassées par jour. J'ai pensé que j'avais foiré quelque chose pendant mes changements, mais pour être sûr, jeté ensemble un petit fichier de test PHP qui m'a donné des résultats étranges. Le fichier de test est juste;Est-ce que différents serveurs doivent traduire les horodatages unix comme des dates différentes?

<?php 
$date = 1246053600; 
echo 'unix: ',$date,', converted: ',date('d/m/Y', $date); 
?> 

Si je lance le code ci-dessus sur mon localhost je reçois:

unix: 1246053600 converti: 26/06/2009

Mais si je le lance sur la serveur de production Je reçois:

unix: 1246053600, converti: 27/06/2009

Notez la différence de jour entre les deux? Qu'est-ce qu'il se passe ici?! La conversion d'un horodatage unix en une date n'a sûrement aucune dépendance spécifique au serveur.

Répondre

4

Vos serveurs peuvent être définis sur deux fuseaux horaires différents et interprètent l'horodatage comme étant le nombre de secondes écoulées depuis le 1er janvier 1970 à minuit GMT. Les dates ne peuvent pas être décalées d'une journée entière, mais juste une partie d'une journée, assez pour la faire traverser la limite de minuit.

+0

Il est avéré être exactement cela; les paramètres de fuseau horaire sur le serveur de production * juste * bumped la date dans le jour suivant. – Mathew

1

J'ai eu un problème similaire auparavant. J'ai trouvé que le fuseau horaire dans le php.ini de ma machine de développement était différent du serveur de production.

Je dirais que cela vaut le coup de vérifier.

4

Le problème est que la valeur $ date que vous fournissez est supposée être en UTC. Si vous use gmdate, you will get the same result sur les deux serveurs. Sinon, la date et l'heure affichées seront ajustées en fonction du fuseau horaire des serveurs. Vous pouvez utiliser le O (capitale oh) code pour imprimer le fuseau horaire pour effectuer le réglage en cours sur chaque serveur clair:

echo 'unix: ',$date,', converted: ',date('d/m/Y O', $date);

+0

+1 pour l'intro de gmdate(); très utile! – Mathew

Questions connexes