2016-04-29 1 views
2

Je lance un test simple comparant la sortie de date() et gmdate() et je suis perplexe avec les résultats. Je comprends la différence entre les fonctions, cependant, le serveur est réglé sur l'heure GMT donc je m'attendrais à ce que le résultat soit identique.date() et gmdate() retournent des résultats différents

J'ai vérifié le réglage de fuseau horaire et ils semblent être bien. Je soupçonne que cela a quelque chose à voir avec les économies de jour.

J'ai raison de m'attendre à ce que la sortie soit la même?

if (date_default_timezone_get()) { 
    echo 'date_default_timezone_set: ' . date_default_timezone_get() . '<br />'; 
} 

echo '<br>Full date '.date("Y-m-d H:i:s T I"); 
echo '<br>Full date GM '.gmdate("Y-m-d H:i:s T I"); 

$now = date("Y-m-d H:i:s T I"); 
$tempDate = $startWeek = time(); 

$date = new DateTime(); 
$tempDateU = $date->format('U'); 

$tempDate = $startWeek = time(); 
echo '<br>Date: '.date("d/m/y H:i", $tempDate); 
echo '<br>GM Date: '.gmdate("d/m/y H:i", $tempDate); 

echo '<br>Date: '.date("d/m/y H:i", $tempDateU); 
echo '<br>GM Date: '.gmdate("d/m/y H:i", $tempDateU); 

Sortie:

date_default_timezone_set: Europe/London 

Full date 2016-04-29 11:35:55 BST 1 
Full date GM 2016-04-29 10:35:55 GMT 0 
Date: 29/04/16 11:35 
GM Date: 29/04/16 10:35 
Date: 29/04/16 11:35 
GM Date: 29/04/16 10:35 
+1

'Europe/London'! ​​=' GMT' – CBroe

+1

On dirait que le serveur est réglé sur 'Europe/London' qui * n'est pas * GMT pour le moment mais BST (British Summer Time) => GMT + 1 – CD001

Répondre

2

* Avertissement: date_default_timezone_get(): Il n'est pas prudent de se fier aux paramètres du fuseau horaire du système. Vous devez utiliser le paramètre date.timezone ou la fonction date_default_timezone_set() *

Vous devez donc définir votre fuseau horaire actuel pour être sûr de ce que vous faites.

date_default_timezone_set('Europe/London'); 

Ou

date_default_timezone_set('UTC'); 

Comme mentionné précédemment, Europe/London n'est pas la même chose que GMT/UTC. Rappel: GMT n'a pas DST, c'est toujours la même heure. Europe/Londres a DST. C'est pourquoi je dans gmdate donne 0

+0

OK, c'est logique. Je ne savais pas que GMT ne tenait pas compte de l'heure d'été. – Revover

+0

Nice à lire: http://www.timeanddate.com/time/zones/gmt –

1

Oui, heure d'été est à l'origine de cette. D'où le date() dit BST 1 et gmdate() dit GMT 0.

Je ne sais pas pourquoi, je vais y jeter un coup d'œil. Peut-être que le fuseau horaire est Londres, donc c'est en BST.