首页 > 解决方案 > JavaScript 日期方法在 FireFox 中不起作用

问题描述

我为一个网站构建了一个倒数计时器,它在其他浏览器上运行良好,但由于某种原因,我构建它的方式似乎不适用于 firefox,我不知道为什么。页面上的数字表示 NaN,而在其他浏览器上,数字实际上是倒计时。我的代码如下,任何帮助将不胜感激。谢谢你。

<template>
  <div class="countdown">
    <!-- <img class="cover-image" src="@/assets/img/event_cover_image@2x.png" /> -->
    <div class="countdown-container">
      <h2>{{ `${$t('countdown.labels.countdownToEvent')}:` }}</h2>
      <div class="counter">
        <div>
          <div id="day">0</div>
          {{ $t('countdown.labels.days') }}
        </div>
        <div>
          <div id="hour">0</div>
          {{ $t('countdown.labels.hours') }}
        </div>
        <div>
          <div id="minute">0</div>
          {{ $t('countdown.labels.minutes') }}
        </div>
        <div>
          <div id="second">0</div>
          {{ $t('countdown.labels.seconds') }}
        </div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: 'Countdown',
  data() {
    return {
      countDate: new Date('Oct 20, 2020 00:00:00:00').getTime(),
      counter: null,
    };
  },
  mounted() {
    this.counter = setInterval(() => {
      const now = new Date().getTime();
      const gap = this.countDate - now;

      const second = 1000;
      const minute = second * 60;
      const hour = minute * 60;
      const day = hour * 24;

      let d = Math.floor(gap / day);
      let h = Math.floor((gap % day) / hour);
      let m = Math.floor((gap % hour) / minute);
      let s = Math.floor((gap % minute) / second);

      if (d <= 0 && h <= 0 && m <= 0 && s <= 0) {
        clearInterval(this.counter);
        d = 0;
        h = 0;
        m = 0;
        s = 0;
      }
      document.querySelector('#day').innerText = d;
      document.querySelector('#hour').innerText = h;
      document.querySelector('#minute').innerText = m;
      document.querySelector('#second').innerText = s;
    }, 1000);
  },
  beforeDestroy() {
    clearInterval(this.counter);
  },
};
</script>

标签: javascriptdatevue.jstimercountdown

解决方案


MDN

dateString
表示日期的字符串值,以 Date.parse() 方法识别的格式指定。

然后parse

在ES5 之前不建议使用 Date.parse,字符串的解析完全依赖于实现。不同主机解析日期字符串的方式仍然存在许多差异,因此应该手动解析日期字符串(如果要适应许多不同的格式,库可以提供帮助)。


那是你的问题。不同的实现支持不同的日期格式,而 Firefox 不支持您使用的日期格式。

改用图书馆。

例如时刻

const date = moment('Oct 20, 2020 00:00:00:00', 'MMM DD, YYYY HH:mm:ss:SS')

推荐阅读