PHP中關(guān)于日期的函數(shù)很常用,比如date、strtotime等等,然而毫秒的單位卻不是很好用,因?yàn)檫@個(gè)單位是在PHP 7開始引入的。
為什么需要毫秒呢?以前我們做時(shí)間計(jì)算的時(shí)候,秒級(jí)別一般就夠用了,不過現(xiàn)在的需求越來越多樣化,一些業(yè)務(wù)需要毫秒級(jí)別的時(shí)間計(jì)算,比如一些控制設(shè)備(例如溫控器等)會(huì)要求毫秒級(jí)別的管理,再比如說某些處理數(shù)據(jù)時(shí),需要非常明確的開始和結(jié)束時(shí)間,那么毫秒級(jí)別的時(shí)間戳就顯得非常必要了。
下面我們來一一介紹PHP中如何獲取當(dāng)前時(shí)間、轉(zhuǎn)換時(shí)間以及精確到毫秒的方法。
1、獲取當(dāng)前時(shí)間(精確到秒)
<?php echo date('Y-m-d H:i:s'); ?>
上面的代碼可以獲取當(dāng)前年-月-日 時(shí):分:秒的格式,但是沒有毫秒。
2、獲取當(dāng)前時(shí)間(精確到毫秒)
<?php echo date('Y-m-d H:i:s').":".explode(".",microtime(true))[1]; ?>
我們使用microtime()加explode()函數(shù)來實(shí)現(xiàn),microtime()函數(shù)能夠以秒級(jí)別給出當(dāng)前時(shí)間戳,而參數(shù)為true時(shí),時(shí)間戳?xí)o出毫秒級(jí)別。同時(shí)我們經(jīng)過explode()函數(shù)轉(zhuǎn)換后,就可以得到小數(shù)點(diǎn)后的毫秒部分。
3、時(shí)間字符串轉(zhuǎn)成時(shí)間戳
<?php $timeString = '2022-09-22 14:22:33.123'; echo strtotime(str_replace('.', '-', $timeString)); ?>
PHP的strtotime()函數(shù)可以將一個(gè)時(shí)間字符串轉(zhuǎn)化為時(shí)間戳,但是我們發(fā)現(xiàn)它不能處理毫秒這個(gè)單位,那么為了使strtotime()能夠處理帶有毫秒的時(shí)間字符串,我們需要做一些變化,將其轉(zhuǎn)換成符合strtotime()能解析的格式。使用str_replace()函數(shù)將毫秒的點(diǎn)替換成短橫線即可。
4、時(shí)間戳轉(zhuǎn)成時(shí)間字符串
<?php $timeStamp = "1664322353.123"; echo date('Y-m-d H:i:s', (int)$timeStamp).substr($timeStamp, 10, 4); ?>
時(shí)間戳轉(zhuǎn)成時(shí)間字符串,使用date()函數(shù)就可以,但是還需要將毫秒加進(jìn)去,substr()函數(shù)可以獲取毫秒部分。
以上就是關(guān)于PHP中date毫秒的一些介紹,毫秒可以滿足一些非常精確的業(yè)務(wù)需求,如果您在做一些時(shí)間精度要求比較高的項(xiàng)目,毫秒級(jí)別的時(shí)間戳是不可少的呢。