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沒有及時更新(快取的)時間戳,所以導致t2
和t1
獲取到的時間戳是一樣的。那麼怎樣才能強迫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 ...