web-dev-qa-db-fra.com

php: convertir les millisecondes à ce jour

J'ai une chaîne qui est égale à une date, représentée comme le nombre de millisecondes depuis l'époque Unix.

J'essaie de le sortir en d-m-Y.

La chaîne qui m'a été donnée était "1227643821310", et on me dit que le résultat devrait être égal à 2-12-2008, mais j'obtiens toujours un résultat de 25-11-2008

Mon code est le suivant:

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

Des idées sur la raison pour laquelle cela pourrait être?

41
Jeff Winkworth

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

40
Patrick Glandien

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);
18
DanielOpaluwa

Jeff, la chose importante à comprendre lorsque l'on traite des horodatages: ils représentent le temps qui s'est écoulé depuis 0:00:00 01.01.1970 en GMT, pas dans votre fuseau horaire (sauf si vous êtes vous-même en GMT, de cours).

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

C'est le 25 novembre 2008 dans la plupart des pays du monde, mais dans les fuseaux horaires à l'est de Moscou (et dans le fuseau horaire de Moscou lui-même en été à cause de l'heure d'été), c'est déjà le 26 novembre. Étant donné que le fuseau horaire est le plus "extrême" est GMT + 14, il n'y a aucun endroit au monde où l'horodatage de 1227643821 peut représenter une date postérieure au 26.

L'auteur de la valeur d'origine peut s'être trompé d'une manière ou d'une autre lorsqu'il s'agit de fuseaux horaires. Ou tout simplement trompé. Par exemple, lors du calcul de la valeur, ajout de secondes au lieu de millisecondes à un moment donné.

1
Ilya Birman

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

1
Scott