2009-02-17 6 views
32

I Possède une chaîne de caractères égale à une date, représentée par le nombre de millisecondes écoulées depuis l'époque Unix. J'essaie de le sortir en d-m-Y.php: convertir des millisecondes à ce jour

La chaîne m'a donné était « 1227643821310 », et on me dit que le résultat devrait être égal à 2-12-2008, mais je continue à obtenir un résultat de 25-11-2008

Mon code est le suivant:

$mil = 1227643821310; 
$seconds = $mil/1000; 
echo date("d-m-Y", $seconds); 

Toutes les idées pour lesquelles cela pourrait être?

Répondre

34

Vous le faites déjà correctement, 1227643821 n'est tout simplement pas 02-12-2008, c'est en effet 25-11-2008.

+0

Convenu. Voir ici pour l'assurance: http://www.onlineconversion.com/unix_time.htm – ryeguy

+0

Vous avez en effet raison - il s'avère que la source que j'ai reçu était erronée. –

+0

'date d'écho (" d-m-Y ", ($ mil/1000)); '- Une raison de ne pas simplement sauvegarder du code et de tout faire en une fois? Toujours à la recherche de moyens pour économiser la mémoire et réduire la mémoire/variables/lignes inutiles. – Wes

1

La seule chose que je peux penser est d'essayer d'arrondir la partie décimale avant de le convertir en une date. Si cela ne change pas le résultat, alors le résultat est correct.

+0

Déjà essayé, il en résulte le même. –

1

Jeff, la chose importante à comprendre lorsqu'ils traitent avec horodatages: ils représentent le temps qui ont passé de 0:00:00 01.01.1970 GMT, pas dans votre fuseau horaire (sauf si vous êtes youself GMT, bien sûr).

1227643821 représente en effet l'heure GMT de 20:10:21 25.11.2008.

C'est le 25 Novembre 2008 dans la plupart du monde, mais dans l'est à timezones de Moscou (et dans le même fuseau horaire de Moscou en été à cause de l'heure d'été), il est déjà Novembre 26 mai. Comme le fuseau horaire le plus "extrême" est GMT + 14, il n'y a pas de place dans le monde où l'horodateur de 1227643821 peut représenter une date ultérieure au 26.

L'auteur de la valeur d'origine peut avoir été confondu avec les fuseaux horaires. Ou tout simplement faux. Par exemple, lors du calcul de la valeur, ajoutez des secondes au lieu de millisecondes à une étape.

+1

Ilya, il est vrai que Unix Timestamps (temps POSTIX) est la durée écoulée depuis l'époque de GMT, cependant, lorsque vous utilisez PHP [date()] (http://php.net/manual/en /function.date.php), il convertit cette date en équivélant l'heure locale de votre serveur. Pour obtenir la date en heure GMT, vous devez utiliser la fonction [gmdate()] de PHP (http://www.php.net/manual/fr/function.gmdate.php). –

10

Je viens d'ajouter H: i: s comme dans l'exemple ci-dessous:

$mil = 1227643821310; 
$seconds = $mil/1000; 
echo date("d/m/Y H:i:s", $seconds);