【问题标题】:Date Time Not Shown as NaN on Safari日期时间在 Safari 上未显示为 NaN
【发布时间】:2021-01-18 20:58:52
【问题描述】:

学习 JS 并且已经知道如何做一个简单的倒计时。问题是我最近改为倒计时直到日期时间,而不仅仅是日期,现在 iOS Safari 将倒计时显示为“NaN”秒等,我不知道为什么。 (见here

日期从 php 中的 sql db 中提取出来,此页面上唯一使用的 js im 用于倒数计时器。 代码如下。

<script>
// Set date to countdown til
var countDownDate = new Date("<?php echo $dbDate; ?>").getTime();

// Update every second
var x = setInterval(function() {

  // Get current date and time
  var now = new Date().getTime();

  // Calculate distance between then and now
  var distance = countDownDate - now;

  // Calculations for days, hours, minutes and seconds
  var days = Math.floor(distance / (1000 * 60 * 60 * 24));
  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);

  // Output result with id="countdown"
  document.getElementById("countdown-top").innerHTML = days + "d : " + hours + "h";
  document.getElementById("countdown-bottom").innerHTML = minutes + "m : " + seconds + "s ";

  // If countdown ended show text
  if (distance < 0) {
    clearInterval(x);
    document.getElementById("countdown-top").innerHTML = "Coutdown Has Ended,";
    document.getElementById("countdown-bottom").innerHTML = "Not Long Left!";
  }
}, 1000);
</script>

【问题讨论】:

  • 您能否提供$dbDate 的示例值?好像 Safari 无法解析格式。
  • @JoanPicornell $dbDate 等于字符串“2020-10-15 19:30:00”

标签: javascript ios safari mobile-safari


【解决方案1】:

这里的主要问题是 $dbDate 以 Safari 无法解析的格式提供。根据 StackOverflow 上的其他问题,我建议您使用 date-fns library。更具体地说,使用该库的parse function。这个库还有另一个有用的实用程序,我认为它们会适合您的代码并使其更具可读性。

您也可以尝试提供 Safari 可以理解的格式,可能是 ISO8601。您必须在 PHP 中更改它,所以 $dbDate 是一个有效的 ISO 日期。这可能适用于某些 Safari 版本,但我建议您使用 date-fns 等库,这样您将获得更广泛的浏览器支持。

【讨论】:

  • 我暂时将日期重新格式化为 ISO,它已经解决了现代 safari 的问题。我现在将学习如何使用 date-fns libaray。感谢您的帮助。
  • 太棒了!很高兴它有帮助。如果您认为这是正确答案,请将其标记为正确答案,以便其他人可以轻松找到。
【解决方案2】:

为我转换 ISO8601 固定 NaN 值中的 php 日期。 您可以通过以下方式做到这一点

$convert_date = date(DATE_ISO8601, strtotime($your_date));

【讨论】:

  • 用反引号包裹代码很有帮助like this
  • 你是对的。完成!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多