Vous pouvez facilement le faire avec le format d'entrée U.u
.
$now = DateTime::createFromFormat('U.u', microtime(true));
echo $now->format("m-d-Y H:i:s.u");
Cela produit le résultat suivant :
04-13-2015 05:56:22.082300
Depuis la page du manuel PHP sur les formats de date :
- U = Secondes depuis l'époque d'Unix
- u = Microsecondes
http://php.net/manual/en/function.date.php
Merci à giggsey d'avoir signalé une faille dans ma réponse initiale, en ajoutant number_format()
à la ligne devrait fixer le cas de la seconde exacte. Dommage que cela ne soit plus aussi élégant...
$now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));
http://php.net/manual/en/function.number-format.php
Une remarque sur les fuseaux horaires en réponse à DaVe.
Normalement, le createFromFormat()
utilise le fuseau horaire local si celui-ci n'est pas spécifié.
http://php.net/manual/en/datetime.createfromformat.php
Toutefois, la technique décrite ici consiste à initialiser l'objet DateTime à l'aide de la fonction microtime()
qui renvoie le nombre de secondes écoulées depuis l'époque Unix (01 Jan 1970 00:00:00 GMT).
http://php.net/manual/en/function.microtime.php
Cela signifie que l'objet DateTime est implicitement initialisé à UTC, ce qui convient parfaitement aux tâches internes du serveur qui souhaitent simplement suivre le temps écoulé.
Si vous devez afficher l'heure d'un fuseau horaire particulier, vous devez le régler en conséquence. Toutefois, cette opération doit être effectuée dans une étape distincte après l'initialisation ( pas en utilisant le troisième paramètre de createFromFormat()
) pour les raisons évoquées ci-dessus.
El setTimeZone()
peut être utilisée pour répondre à cette exigence.
http://php.net/manual/en/datetime.settimezone.php
A titre d'exemple :
$now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));
echo $now->format("m-d-Y H:i:s.u") . '<br>';
$local = $now->setTimeZone(new DateTimeZone('Australia/Canberra'));
echo $local->format("m-d-Y H:i:s.u") . '<br>';
Produit la sortie suivante :
10-29-2015 00:40:09.433818
10-29-2015 11:40:09.433818
Notez que si vous voulez entrer dans mysql, le format de l'heure doit être :
format("Y-m-d H:i:s.u")