【问题标题】:Time Countdown working in Chrome but not safari时间倒计时在 Chrome 中工作,但不是 safari
【发布时间】:2016-06-14 09:43:32
【问题描述】:

我有一个顶部栏,上面有倒计时。它在 chrome 和 firefox 上运行良好,但我刚刚意识到它似乎不适用于 safari。 这是代码:

<div class="deadline_Container">
  <div id="clockdiv">
    <span class="deadline_Text">You only have </span>
  <div><span class="days"></span><span  class="smalltext">Days</span></div>
  <div><span class="hours"></span><span  class="smalltext">Hours</span></div>
  <div><span class="minutes"></span><span  class="smalltext">Minutes</span>
</div>
<div class="clockLast"><span class="seconds"></span><span  class="smalltext">Seconds</span></div>
 <span class="deadline_Text2">left to get free delivery!</span></div>
</div>

<script type="text/javascript">
var deadline = 'Jun 15 2016 23:59:59 GMT';
function time_remaining(endtime){
  var t = Date.parse(endtime) - 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) );
return {'total':t, 'days':days, 'hours':hours, 'minutes':minutes,  'seconds':seconds};
}

function run_clock(id,endtime) {
  var clock = document.getElementById(id);
  var days_span = clock.querySelector('.days');
  var hours_span = clock.querySelector('.hours');
  var minutes_span = clock.querySelector('.minutes');
  var seconds_span = clock.querySelector('.seconds');

  function update_clock(){
    var t = time_remaining(endtime);
    days_span.innerHTML = t.days;
    hours_span.innerHTML = ('0' + t.hours).slice(-2);
    minutes_span.innerHTML = ('0' + t.minutes).slice(-2);
    seconds_span.innerHTML = ('0' + t.seconds).slice(-2);
    if(t.total<=0) {
      clearInterval(timeinterval);
    }
  }

  update_clock();
  var timeinterval = setInterval(update_clock,1000);
}

run_clock('clockdiv',deadline);
</script>

现在在 safari 上,而不是天、小时、分钟等,它说的是“NaN”“an”“an”。所以我认为这与时间格式有关?

我试过这样设置时间:

 var deadline = '2016-06-15T23:59:59 GMT +0100';

但这没有用。有什么想法吗?

【问题讨论】:

    标签: javascript safari


    【解决方案1】:

    您的基本问题是使用 Date 构造函数解析字符串。永远不要那样做。强烈建议不要使用 Date 构造函数(或 Date.parse,它们与解析等效)解析字符串,因为它在很大程度上取决于实现。

    因此,您会在不同的浏览器中看到不同的结果。变化:

    var deadline = 'Jun 15 2016 23:59:59 GMT';
    

    var deadline = new Date(Date.UTC(2016, 5, 15, 23, 59, 59));
    

    var t = Date.parse(endtime) - Date.parse(new Date());
    

    var t = endtime - new Date();
    

    请注意,Date.parse(new Date()) 将创建一个新日期,使用依赖于实现的 Date.prototype.toString 将其转换为字符串,将其解析回日期,然后获取时间值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      • 1970-01-01
      相关资源
      最近更新 更多