1. 程式人生 > >php獲取當前毫秒時間戳

php獲取當前毫秒時間戳

最近在做一個智慧家居專案的後臺,需要實時上傳使用者對智慧裝置的配置資訊到伺服器,以便實現同步,因此對於時間的精確度要求比較高,最開始直接是用php的time()函式來獲取時間戳,獲取的時間精確到秒級別,如果客戶端同時操作的話還是有可能產生衝突,因此建議將時間戳精度提高到毫秒級別,但是在php沒有自帶的函式能獲取毫秒時間戳,但提供了一個microtime()函式,如果呼叫時不帶可選引數,本函式以 "msec sec" 的格式返回一個字串,其中 sec 是自 Unix 紀元(0:00:00 January 1, 1970 GMT)起到現在的秒數,msec 是微秒部分。字串的兩部分都是以秒為單位返回的。

microtime()函式的詳細說明,可以到w3chool上面看看《

PHP microtime() 函式》。

<?php

echo microtime();

//輸出結果是

//0.25139300 1138197510

 

 注意了,它的結果是分兩部分的,也就是前半部分是毫秒(但是單位是秒),後半部分是秒。
現在,我們依據這個做下修改,如下:
 

<?php

list($msec, $sec) = explode(' ', microtime());

$msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);

這樣就可以了,$msectime就是當前的毫秒數!可以將這兩行封裝成一個函式方便使用。

 

<?php

//返回當前的毫秒時間戳

function msectime() {

list($msec, $sec) = explode(' ', microtime());

$msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);

}

注意:sprintf('%.0f', $num) 是輸出不含小數部分的浮點數

事情還沒有結束,我把時間戳改成毫秒級別後,再次更新資料庫資料時,卻提示超出範圍,原來之前我在資料庫中是用int型來儲存time()函式獲取的秒級別的時間戳,儲存範圍是夠的,改成毫秒級別的,就得改成BIGINT型別了。

 

整數型別         位元組          範圍(有符號)            範圍(無符號)                用途 

TINYINT           1位元組        (-128,127)                       (0,255)                    小整數值 

SMALLINT          2位元組     (-32 768,32 767)                    (0,65 535)                 大整數值 

MEDIUMINT         3位元組    (-8 388 608,8 388 607)               (0,16 777 215)             大整數值 

INT或INTEGER      4位元組   (-2 147 483 648,2 147 483 647)       (0,4 294 967 295)            大整數值 

BIGINT            8位元組   (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 極大整數值