最近在開發跨平台的應用,在做秒殺功能時,倒計時出現了問題。默認在Chrome瀏覽器中運行,倒計時沒出現問題。而在IE瀏覽器,火狐瀏覽器,safari瀏覽器上運行時,則顯示NaN天NaN時NaN分(或顯示天時分)。上網查了好多日期轉換的函數都沒有解決問題。
在瀏覽器斷點調試下發現curTime,endTime,dDate的值顯示為NaN。大體查了一下NaN.
NaN 相關鏈接 http://www.w3school.com.cn/jsref/jsref_nan_number.asp
NaN 屬性是代表非數字值的特殊值。該屬性用於指示某個值不是數字。可以把 Number 對象設置為該值,來指示其不是數字值。
僅僅修改了一行代碼:
將var dDate = new Date(Date.parse(sDate));
改為var dDate = new Date(Date.parse(sDate.replace(/-/g,"/")));
js中 replace(/-/g, '/') 什么作用.
/-/g 是正則表達式
表示將所有短橫線-替換為斜杠/,其中g表示全局替換
/g意思就是:global可選標志,帶這個標志表示替換將針對行中每個匹配的串進行,否則則只替換行中第一個匹配串。如:we.fdffddfwe.加上/g后,則2個we都會出來;

講解:
/pattern/是正則表達式的界定符,里面的內容(pattern)是要匹配的內容,就是本例中的/\//;
\是轉義的意思,\/代表的是/字符。
1.c_promo.js
1 var tArr = []; 2 (function () { 3 var sCurTime = getCurTime();//yyyy-MM-dd HH:mm:ss 4 $("[data-type='promo']").each(function (i, o) { 5 var id = $(this).attr("data-id"); 6 var sEndTime = $(this).find("[name='endTime']").val(); 7 8 var curTime = getDateByStr(sCurTime); 9 var endTime = getDateByStr(sEndTime); 10 var t = endTime.getTime() - curTime.getTime(); 11 12 if (t < 0) { 13 return true; 14 } 15 16 var obj = {t: t, id: id}; 17 tArr.push(obj); 18 }); 19 setIntervalTime(); 20 setInterval(setIntervalTime, 1000); 21 })(); 22 23 function setIntervalTime() { 24 $(tArr).each(function (i, o) { 25 var id = o.id; 26 var t = o.t; 27 t = t - 1000; 28 var o1 = parseTime(t); 29 o.t = t; 30 $("[data-id='" + id + "']").find(".hour").html(o1.h); 31 $("[data-id='" + id + "']").find(".min").html(o1.m); 32 $("[data-id='" + id + "']").find(".sec").html(o1.s); 33 }); 34 }
2.common.js
1 function parseTime(t) { 2 var d = Math.floor(t / 1000 / 60 / 60 / 24); 3 var h = Math.floor(t / 1000 / 60 / 60 % 24); 4 var m = Math.floor(t / 1000 / 60 % 60); 5 var s = Math.floor(t / 1000 % 60); 6 //if (d > 0) { 7 // h = "--"; 8 // m = "--"; 9 // s = "--"; 10 //} else if (d < 0) { 11 // h = "00"; 12 // m = "00"; 13 // s = "00"; 14 //} else { 15 if (h < 10) { 16 h = "0" + h; 17 } 18 if (m < 10) { 19 m = "0" + m; 20 } 21 if (s < 10) { 22 s = "0" + s; 23 } 24 //} 25 26 var timeObj = { 27 d: d, h: h, m: m, s: s, t: t 28 }; 29 return timeObj; 30 } 31 32 function getDateByStr(sDate) { 33 // var dDate = new Date(Date.parse(sDate)); 34 var dDate = new Date(Date.parse(sDate.replace(/-/g,"/"))); 35 return dDate; 36 }
