2011-10-07 5 views
1

Juste tombé sur ce bug étrange avec l'objet DateTime de php ... Check this out:php DateTime objet avec horodatage unix incorrect - bug?

<?php 
$date = 1335823200; 
echo date('d',$date); 
echo '<br />'; 
$date = new DateTime("@$date"); 
echo $date->format('d'); 
?> 

Retours:

06 
05 

Il ne se produit pas avec un horodatage. Je pense que cela a quelque chose à voir avec des fuseaux horaires différents, mais jouer avec setlocale() n'a rien arrangé. Par ailleurs, le '@' dans DateTime est nécessaire pour pouvoir utiliser les horodatages unix (voir le rapport de bug here). Voici quelques horodatages à tester:

1333663200 
1338588000 
1338847200 

Répondre

2

Puisque vous n'avez pas spécifié fuseau horaire pour DateTime il est supposé qu'il est UTC, alors que date respecte fuseau horaire actuel (spécifié par date_default_timezone_set ou pris de php.ini). Il suffit d'exécuter ceci et de voir:

$date = 1335823200; 
echo date('d-m-Y H:i:s',$date); 
echo '<br />'; 
$date = new DateTime("@$date"); 
echo $date->format('d-m-Y H:i:s'); 
+0

Merde, je pensais que les deux utiliseraient simplement les paramètres de la même source. Savez-vous si je peux globalement définir une valeur par défaut pour DateTime (avant d'instanciation)? – Anonymous

+0

@danontheline: manuel dit que php * devrait * utiliser le fuseau horaire par défaut, mais en fait sur mon php 5.2 ce n'est pas correct. Probablement il a été corrigé en 5.3 – zerkms