约会数学在Chrome上有效,但在Firefox或Safari上无效

Date math works on Chrome but not on Firefox or Safari

本文关键字:但在 Firefox 无效 Safari 有效 Chrome 约会      更新时间:2023-09-26

我的页面中有这个JavaScript。

function getTimeRemaining(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
  };
}

结束时间是一个类似"2016-01-12 23:15:00"的日期

我的代码在Chrome上运行得很好,但在Safari和Firefox中返回NaN

我假设这一行:

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

应该是

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

问题是你的结束时间的格式。由于您没有使用标准格式,因此它可能在Chrome中有效,但在其他浏览器中无效。来自MDN:

由于日期字符串的解析存在差异,建议始终手动解析字符串,因为结果不一致,尤其是在不同的ECMAScript实现中,像"2015-10-12 12:00:00"这样的字符串可能被解析为NaN、UTC或本地时区。

我对拼写错误和不完整的信息进行了一些猜测,但为了获得有用的时差:

function getTimeRemaining(endtime) {
  var t = Date.parse(endtime) - (new Date()).getTime();
  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
  };
}
console.log(getTimeRemaining("2020-04-04"));

您不需要parse()new Date()——它不是一个字符串,结果将是不可预测的。只需在Date上使用getTime()即可获得其毫秒表示。

相关文章: