最近在开发跨平台的应用,在做秒杀功能时,倒计时出现了问题。默认在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
var tArr = [];
(function () {
var sCurTime = getCurTime();//yyyy-MM-dd HH:mm:ss
$("[data-type='promo']").each(function (i, o) {
var id = $(this).attr("data-id");
var sEndTime = $(this).find("[name='endTime']").val(); var curTime = getDateByStr(sCurTime);
9 var endTime = getDateByStr(sEndTime);
10 var t = endTime.getTime() - curTime.getTime(); if (t < 0) {
return true;
} var obj = {t: t, id: id};
tArr.push(obj);
});
setIntervalTime();
setInterval(setIntervalTime, 1000);
})(); function setIntervalTime() {
$(tArr).each(function (i, o) {
var id = o.id;
var t = o.t;
t = t - 1000;
var o1 = parseTime(t);
o.t = t;
$("[data-id='" + id + "']").find(".hour").html(o1.h);
$("[data-id='" + id + "']").find(".min").html(o1.m);
$("[data-id='" + id + "']").find(".sec").html(o1.s);
});
}
2.common.js
function parseTime(t) {
var d = Math.floor(t / 1000 / 60 / 60 / 24);
var h = Math.floor(t / 1000 / 60 / 60 % 24);
var m = Math.floor(t / 1000 / 60 % 60);
var s = Math.floor(t / 1000 % 60);
//if (d > 0) {
// h = "--";
// m = "--";
// s = "--";
//} else if (d < 0) {
// h = "00";
// m = "00";
// s = "00";
//} else {
if (h < 10) {
h = "0" + h;
}
if (m < 10) {
m = "0" + m;
}
if (s < 10) {
s = "0" + s;
}
//} var timeObj = {
d: d, h: h, m: m, s: s, t: t
};
return timeObj;
} function getDateByStr(sDate) {
// var dDate = new Date(Date.parse(sDate));
34 var dDate = new Date(Date.parse(sDate.replace(/-/g,"/")));
return dDate;
}