ngx lua獲取時間戳的幾種方式

2021-07-26 21:43:12 字數 1417 閱讀 3151

print(string.format("%s, %s, %s, %s", ngx.time(), os.time(), os.clock(), ngx.now()))

ngx.exit(200)

-- 以上**會輸出:1486971340, 1486971340, 209.77, 1486971340.422

可見,通過os.clock()獲取到的並不是時間戳,它獲取的是乙個程式使用cpu時間的乙個近似值,而我們的目的是獲取時間戳,所以排除掉這種方法。

再看ngx.time()os.time(),它們返回的都是秒級精度的時間戳,而ngx.now()返回的是毫秒級精度的時間戳。做開發時可以根據實際的精度需要來選擇不同的獲取方式。

那麼,ngx.time()os.time()有什麼區別嗎?

有,os.time()會涉及系統呼叫,而ngx.time()不會,所以ngx.time()的效能會比os.time()高。

但在使用ngx.time()ngx.now()的時候,有一點是要注意的,就是通過這兩種方式獲取到的只是nginx快取起來的時間戳,不是實時的。所以有時候會出現一些比較奇怪的現象,比如下面**:

local t1 = ngx.now()

for i=1,1000000

doend

local t2 = ngx.now()

print(t1, ",", t2) -- 輸出1487053211.321,1487053211.321

ngx.exit(200)

正常來說,t2應該大於t1才對,但由於nginx沒有及時更新(快取的)時間戳,所以導致t2t1獲取到的時間戳是一樣的。那麼怎樣才能強迫nginx更新快取呢?呼叫多乙個ngx.update_time()函式即可:

local t1 = ngx.now()

for i=1,1000000

doend

ngx.update_time()

local t2 = ngx.now()

print(t1, ",", t2) -- 輸出1487054647.584,1487054647.586

ngx.exit(200)

可見,獲取到的時間戳已經發生了改變。

參考資料:

nginx + lua環境下時間戳更新不及時的問題

ngx.now函式官方解釋

獲取時間戳的幾種方法

實際中如何使用 下面的例子中,我們將取得從 1970 01 01 到 2017 03 19 的毫秒數 1 date.parse 的 使用 var d date parse 2017 03 19 或者var d date.parse new date 返回當前時間毫秒數 console.log d 返...

獲取時間戳

方法 一 system.currenttimemillis 方法 二 calendar.getinstance gettimeinmillis 方法 三 newdate gettime 結果發現 system.currenttimemillis 這種方式速度最快 calendar.getinstan...

獲取時間戳,幾個時間點的時間戳

最近的上上上乙個週日24點時間戳 threeweekago strtotime date y m d time 2 week date w time day 1 day 最近的上上乙個週日24點時間戳 twoweekago strtotime date y m d time 1 week date ...