chrome插件開發之:關於處理定時下單的時間點的處理問題

系統顯示的時間和插件顯示的時間,不知道爲什麼總有點差,有時候居然差1秒。理論上應該是同步纔對。
因爲對於這種到點自動購物的軟件,如果連時間都抓不準,那這個軟件也沒什麼用途了!
再細研究,發現一個細節:
就是,用戶點擊自動購物的時間一般都不是整秒!而界面自動顯示的時間是整秒顯示,如果代碼的定時器(setInterval)的開始時間沒把握好,肯定會有時間差的!
這個時間差一般在1秒之內。不過對於嚴謹性來說是差異蠻大了!要儘量將這個差異縮小!
針對這點,我的解決辦法是:
在界面顯示系統時間的時候,先根據用戶點擊的毫秒時間(用戶肯定是某個毫秒時間點擊功能的),找出隔下一秒的毫秒差,然後再設定一個定時器(setTimeout),下一整秒的時候才顯示系統時間!
用了這個邏輯之後,基本上,功能顯示的系統時間,和電腦的時間是可以對應起來了,基本是同步。
而秒殺的倒計時的顯示也是差不多這個邏輯,反正原則上要做到的是:系統時間是多少,就顯示多少,一秒不多,一秒也不可以少!
上面說的這些都可以在代碼中看到。
附上一個代碼,就是格式化時間的,很有用,網上找到的,特意分享一下:

// 對Date的擴展,將 Date 轉化爲指定格式的String
// 月(M)、日(d)、小時(h)、分(m)、秒(s)、季度(q) 可以用 1-2 個佔位符, 
// 年(y)可以用 1-4 個佔位符,毫秒(S)只能用 1 個佔位符(是 1-3 位的數字) 
// 例子: 
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 
// (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18 
Date.prototype.Format = function (fmt) { //author: meizz 
    var o = {
        "M+": this.getMonth() + 1, //月份 
        "d+": this.getDate(), //日 
        "h+": this.getHours(), //小時 
        "m+": this.getMinutes(), //分 
        "s+": this.getSeconds(), //秒 
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度 
        "S": this.getMilliseconds() //毫秒 
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
    if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章