2008-10-23 12 views
2

J'ai remarqué que quel que soit l'heure d'exécution d'un script donné, chaque appel de date() renvoie le même horodatage, quel que soit l'endroit où la fonction est appelée dans le script. Il semble que cela renvoie juste l'heure à laquelle le script a commencé à s'exécuter. À des fins de journalisation, il serait extrêmement utile de pouvoir obtenir des horodatages incrémentiels à partir d'un script. Est-ce possible? Y a-t-il un moyen de faire cela qui est relativement léger?Obtenir des temps précis en PHP

Modifier: L'exemple de la fonction microtime() suggère-t-il que cela pourrait être le cas. Quelqu'un peut-il confirmer?

Mise à jour: microtime() fonctionne, mais je ne peux pas le formater avec la fonction date() car date() n'accepte que les horodatages comme entiers (donc pas de microsecondes). Comment puis-je obtenir une date correctement formatée à partir de la valeur retournée par microtime()?

Répondre

3

j'ai couru ce code sur ma machine:

<?php 
$time_start = time(); 

sleep(2); 

$time_end = time(); 

print 'Start: ' . date("m/d/Y @ g:i:sA", $time_start) . '<br>'; 
print 'End: ' . date("m/d/Y @ g:i:sA", $time_end); 
?> 

Et sortie:

Start: 10/23/2008 @ 3:12:23PM 
End: 10/23/2008 @ 3:12:25PM 

me porte à croire time() ne se contente pas retourner le moment où l'exécution a commencé.

3

Tout d'abord, date() est utilisé pour formater un horodatage - c'est simplement le comportement par défaut qu'il utilisera l'horodatage actuel, lorsque date() est appelée sans deuxième paramètre. L'horodatage utilisé sera l'horodatage du moment où la fonction est appelée - appeler date('Y-m-d') est le même que d'appeler date('Y-m-d', time())time() vous donnera la

[...] l'heure actuelle mesurée dans le nombre de secondes écoulées depuis l'époque Unix (1er janvier 1970 00:00:00 GMT).

Vous obtenez seulement le même horodatage chaque fois que vous appelez date() parce que votre script est trop rapide et fonctionne en une seconde résultant en aucun horodatage de changement.

Pour répondre à votre deuxième problème de formatage de la valeur microtime() de retour, vous pouvez effectuer les opérations suivantes (non testé)

function formatTime($microtime, $format) 
{ 
    list($timestamp, $fraction) = explode('.', $microtime); 
    return date($format, (int)$timestamp) . '.' . $fraction; 
} 

La valeur donnée à $microtime devrait être un float, que vous obtenez lorsque vous passez true comme paramètre à microtime()