【问题标题】:Jquery Countdown Showing NaN in Safari, Works fine in Chrome / FirefoxJquery Countdown 在 Safari 中显示 NaN,在 Chrome / Firefox 中运行良好
【发布时间】:2014-09-26 12:09:09
【问题描述】:

我正在创建一个便士拍卖网站,我的主页上有几个拍卖。每个拍卖都会根据 mysql 日期格式中的日期获取自己的计时器,格式为“Y-m-d H:i:s”。

代码运行良好,并且计时器在 Firefox 和 Chrome 上都开始完美倒计时,但在 Safari 中,数字显示 NaN:NaN:NaN

这是我的函数,它使用jquery countdown plugin by Keith Wood

function updateTimers() {
        $( ".il-timer" ).each(function( index ) {

            var timer = $(this);
           var end_date = $(timer).attr('data-end-date');
           var auction_id = $(timer).attr('data-auction-id');

           var end = new Date(Date.parse(end_date,"yyyy-mm-dd hh:mm:ss"));

          $('#auction_listing_timer_'+auction_id).countdown({until: end, format: 'HMS', compact: true, description: ''});

          //Do it every 10 seconds...
            setTimeout(function(){

                updateTimers();

            }, 10000);

        });
    };

【问题讨论】:

  • 您的 end_date 看起来不是有效的 ISO 格式字符串,因为非 ISO 格式字符串 may or may not result in NaN -> .parse()。注意-.parse() 没有为您的格式提供第二个参数。您可以在w3.org/TR/NOTE-datetime 找到 ISO 有效格式
  • 在我的例子中,我已经将这种日期格式“2020-12-31 00:00:00”存储在这个变量“inlineDate”中。我使用 inlineDate = inlineDate.replace(/\-/g, "/"); 用“/”对“-”进行了字符串替换。问题就解决了。

标签: javascript php jquery datetime jquery-countdown


【解决方案1】:

一些事情:

  • Date.parse 函数不采用第二个参数。您传递的值 "yyyy-mm-dd hh:mm:ss" 将被忽略。

  • JavaScript 中的日期解析取决于实现。 Firefox 选择不解析该特定格式的值。

  • new Date(Date.parse(...)) 是多余的。您可以将字符串传递给日期构造函数。

  • 一个快速的解决方法是在解析之前用斜杠替换破折号:

    var end = new Date(end_date.replace(/-/g, '/'));
    
  • 更好的方法是使用像moment.js 这样的库,这样您可以控制用于解析的格式:

    var end = moment(end_date, 'YYYY-MM-DD HH:mm:ss').toDate();
    

【讨论】:

  • 优秀的答案。我很感激。全部在所有浏览器中工作。一个++
  • 关于第二点的可能有用/启发性的链接:dygraphs.com/date-formats.html
猜你喜欢
  • 2014-12-25
  • 2013-03-29
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
  • 2016-10-03
  • 1970-01-01
相关资源
最近更新 更多