2010-05-14 5 views
1

Je regarde la fonction date_sunset en PHP et j'ai rencontré un problème que je trouve un peu étrange. J'ai ce morceau de code:PHP: comportement impair avec la fonction date_sunset

$sunset = date_sunset(mktime(0, 0, 0, 5, 14, 2010), 
    $format,    // Format 
    55.596041,    // Latitude 
    12.992495,    // Longitude 
    90,      // Zenith 
    2      // GMT Offset 
); 

Pour les trois formats différents, cela me donnerait:

SUNFUNCS_RET_STRING 21:05 
SUNFUNCS_RET_DOUBLE 21.095732016315 
SUNFUNCS_RET_TIMESTAMP 1273863944 // H:i:s O -> 19:05:44 +0000 

Pourquoi le format d'horodatage en ignorant le décalage gmt? Est censé être comme ça? Si oui, quelle est la raison derrière cela?

Répondre

1

date_sunset (, SUNFUNCS_RET_TIMESTAMP ,,,,) n'ignore pas le décalage, la fonction que vous avez utilisée pour formater la valeur d'horodatage est (c'est-à-dire que le fuseau horaire est réglé sur utc + 0), par exemple

$sunset = date_sunset(mktime(0, 0, 0, 5, 14, 2010), 
    SUNFUNCS_RET_TIMESTAMP,    // Format 
    55.596041,    // Latitude 
    12.992495,    // Longitude 
    90,      // Zenith 
    2      // GMT Offset 
); 

date_default_timezone_set('UTC'); 
echo date('H:i:s O', $sunset), "\n"; 

date_default_timezone_set('Europe/Berlin'); 
echo date('H:i:s O', $sunset), "\n"; 

date_default_timezone_set('America/New_York'); 
echo date('H:i:s O', $sunset), "\n"; 

impressions

19:06:07 +0000 
21:06:07 +0200 
15:06:07 -0400 
+0

C'était le cas! Si je fais 'date_default_timezone_set ('Europe/Stockholm')' d'abord, alors c'est correct :) Merci! – Svish

3

Les horodatages ne contiennent aucune donnée de fuseau horaire. Ce sont les secondes depuis Epoch, qui est le 1er janvier 1970, 00:00:00

+0

Une bonne façon de voir est de faire 'ce jour ("F j, Y h: i: s", 0);'. Si votre fuseau horaire n'est pas GMT, vous aurez un décalage horaire à partir du 1er janvier 1970 00:00:00 –

Questions connexes