简单的JS适用于每个浏览器,但Safari

时间:2017-05-10 01:43:08

标签: javascript safari

常见的头痛,但每个答案似乎都是独一无二的,我有一些简单的JS倒计时直到12月15日,这个倒计时适用于每个浏览器,除了我得到的NaN'在野生动物园的每一天,一小时,一分钟。

<p id="clockdiv" class="decofont ">
<span class="days"></span>
<span class="hours"></span>
<span class="minutes"></span></p>
<!--302 D | 21 H | 48 M december 15 2017 -->

var deadline = '12 15 2017';

function getTimeRemaining() {
    var t = Date.parse('12 15 2017') - Date.parse(new Date());
    var seconds = Math.floor((t / 1000) % 60);
    var minutes = Math.floor((t / 1000 / 60) % 60);
    var hours = Math.floor((t / (1000 * 60 * 60)) % 24);
    var days = Math.floor(t / (1000 * 60 * 60 * 24));

    var time = {
        'total': t,
        'days': days,
        'hours': hours,
        'minutes': minutes,
        'seconds': seconds
    };

    var output_time = document.getElementById('clockdiv');
    output_time.innerHTML = days + ' D | ' + hours + ' H | ' + minutes + ' M';
    setTimeout(getTimeRemaining, 60000);
}


getTimeRemaining(deadline);

如果您有JS跨浏览器兼容性的链接(不能在所有浏览器上运行的常用功能),则可获得积分。是什么导致这个在safari上打破,什么是最简单的替代方案?

1 个答案:

答案 0 :(得分:2)

您的问题的根源在于您正在解析字符串并期望所有浏览器都解析它。解析日期字符串几乎完全取决于实现,只有一种格式(ISO 8601扩展)需要支持ECMA-262。

所以在行:

var t = Date.parse('12 15 2017') - Date.parse(new Date());

您应该使用Date构造函数。此外,您不应使用Date.parse(new Date()),只需使用new DateDate.now()即可:

var t = new Date(2017,11,15) - new Date();

将返回两个日期之间的毫秒差异:

console.log(new Date(2017,11,15) - new Date());

另见Difference between dates in JavaScript