我的网页倒计时了;它除了Mozilla和IE之外的所有浏览器都能正常工作。
我做错了什么,如何解决?
以下是我的代码:
***var dt = '2018-06-14 11:59 AM';
var ids= 'Demo1';***
function getTimes(dt, ids) {
var countDownDate = new Date(dt).getTime();
var x = setInterval(function() {
var now = new Date().getTime();
var distance = countDownDate - now;
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
var op = hours+":"+minutes+":"+seconds;
document.getElementById(ids).innerHTML = op;
if (distance < 0) {
clearInterval(x);
document.getElementById(ids).innerHTML = "00:00:00";
$('a#'+ids).removeClass('a').addClass('aa');
}
}, 1000);
}
这里是错误的屏幕截图;
答案 0 :(得分:1)
请将日期格式2018-06-14
更改为2018/06/14
答案 1 :(得分:1)
在IE中出现解析错误:
var dt = '2018-06-14 11:59 AM';
var countDownDate = new Date(dt).getTime();
// is not valid date
因此您必须更改dt的日期字符串格式。
var dt = '2018/06/14 11:59 AM';
var countDownDate = new Date(dt).getTime();
// work fine in IE
答案 2 :(得分:0)
您接受的dt
值不是数字,导致所有这些计算都导致NaN。
如果您展示如何将值dt
参数传递给函数,我们可以提供更多信息。
答案 3 :(得分:0)
这里的问题是某些浏览器(chrome)会接受'2018-06-14 11:59 AM'作为new Date()
的有效日期字符串。其他浏览器(firefox)没有。如果日期字符串应该接受已在其他地方预先验证过的日期对象,或者它应该处理您的特定日期字符串格式,就好像它没有效一样,那么您的函数就是将日期字符串信任为有效。
以下是一个示例修复:
const dateParts = dt.split(' ') // ['2018-06-14', '11:59', 'AM']
const timeParts = dateParts[1].split(':') // ['11', '59']
const day = dateParts[0] // '2018-06-14'
const hours = parseInt(timeParts[0]) // 11
const minutes = parseInt(timeParts[1]) // 59
var countDownDate = new Date(day)
countDownDate.setHours(hours)
countDownDate.setMinutes(minutes)
编辑:更改源日期格式更容易,此解决方案假设您不能。