time()
est en secondes - y en a-t-il une en millisecondes?
php
time
milliseconds
Arrivant
la source
la source
time()
.microtime(true)
d'autre part retourne l'heure actuelle en secondes depuis l'époque Unix précise à la microseconde la plus proche (voir référence PHP). Il est en fait très facile de tester si vous exécutez le code ci-dessus en boucle et affichez les millisecondes.microtime(true) / 1000
(division plutôt que multiplication)?Utilisez
microtime
. Cette fonction renvoie une chaîne séparée par un espace. La première partie est la partie fractionnaire des secondes, la seconde partie est la partie intégrante. Passeztrue
pour obtenir un numéro:Méfiez-vous des pertes de précision si vous utilisez
microtime(true)
.Il y a aussi
gettimeofday
qui retourne la partie microsecondes sous forme d'entier.la source
microtime()
égal1000*time()
, non?1000
, non?microtime(true)
et1000*time()
1000*time()
ne vous donnera pas des millisecondes.microtime(true)
renvoie unfloat
qui a 14 chiffres de précision. La partie secondes a déjà pris 10, ce qui laisse 4 chiffres pour la partie microsecondes. Cela devrait être suffisant car les millisecondes ne nécessitent que 3 chiffres supplémentaires.Réponse courte:
Plateformes 64 bits uniquement!
[ Si vous utilisez PHP 64 bits, la constante
PHP_INT_SIZE
est égale à8
]Longue réponse:
Si vous voulez d'abord une fonction équivalente de
time()
en millisecondes, vous devez considérer que commetime()
renvoie le nombre de secondes écoulées depuis le "temps d'époque" (01/01/1970), le nombre de millisecondes depuis le "temps d'époque" est un grand nombre et ne rentre pas dans un entier de 32 bits.La taille d'un entier en PHP peut être de 32 ou 64 bits selon la plateforme.
Depuis http://php.net/manual/en/language.types.integer.php
Si vous avez des entiers 64 bits, vous pouvez utiliser la fonction suivante:
microtime()
renvoie le nombre de secondes depuis le "temps d'époque" avec une précision allant jusqu'à microsecondes avec deux nombres séparés par un espace, comme ...Le deuxième nombre est les secondes (entier) tandis que le premier est la partie décimale.
La fonction ci-dessus
milliseconds()
prend la partie entière multipliée par1000
ajoute ensuite la partie décimale multipliée
1000
et arrondie à 0 décimalesNotez que les deux
$mt[1]
et le résultat deround
sont convertis enint
. Ceci est nécessaire car ils sontfloat
s et l'opération sur eux sans casting entraînerait le retour de la fonction afloat
.Enfin, cette fonction est légèrement plus précise que
celui avec un rapport de 1:10 (environ) renvoie 1 milliseconde de plus que le résultat correct. Cela est dû à la précision limitée du type float (
microtime(true)
renvoie un float). Quoi qu'il en soit, si vous préférez toujours le plus court,round(microtime(true)*1000);
je suggère de lancerint
le résultat.Même si cela dépasse la portée de la question, il convient de mentionner que si votre plate-forme prend en charge les entiers 64 bits, vous pouvez également obtenir l'heure actuelle en microsecondes sans encourir de débordement.
Si fait
2^63 - 1
(le plus grand entier signé) divisé par10^6 * 3600 * 24 * 365
(approximativement les microsecondes en un an) donne292471
.C'est la même valeur que vous obtenez avec
En d'autres termes, un entier signé de 64 bits peut stocker une période de plus de 200 000 ans mesurée en microsecondes.
Vous pouvez alors avoir
la source
Comme d'autres l'ont indiqué, vous pouvez utiliser
microtime()
pour obtenir une précision en millisecondes sur les horodatages.D'après vos commentaires, vous semblez le vouloir comme un horodatage UNIX de haute précision. Quelque chose comme
DateTime.Now.Ticks
dans le monde .NET.Pour ce faire, vous pouvez utiliser la fonction suivante:
la source
Utilisation
microtime(true)
en PHP 5, ou la modification suivante en PHP 4:Une façon portable d'écrire ce code serait:
la source
echo date('Y-m-d H:i:s.') . gettimeofday()['usec'];
production:
2016-11-19 15:12:34.346351
la source
$t = gettimeofday(); echo date('Y-m-d H:i:s.',$t['sec']) . $t['usec'];
$timeofday=gettimeofday(); echo sprintf("%s.%06d", date('Y-m-d H:i:s', $timeofday['sec']), $timeofday['usec']);
essaye ça:
la source
Cela fonctionne même si vous êtes en PHP 32 bits:
Notez que cela ne vous donne pas des entiers, mais des chaînes. Cependant, cela fonctionne bien dans de nombreux cas, par exemple lors de la création d'URL pour les demandes REST.
Si vous avez besoin d'entiers, le PHP 64 bits est obligatoire.
Ensuite, vous pouvez réutiliser le code ci-dessus et le convertir en (int):
Ou vous pouvez utiliser les bons vieux one-liners:
la source
J'espère que cela vous aidera.
la source
la source
PHP 5.2.2 <
PHP 7.0.0 <7.1
la source
Utilisez ceci:
Au revoir
la source