【问题标题】:How to run timer from custom datetime?如何从自定义日期时间运行计时器?
【发布时间】:2021-04-12 10:21:22
【问题描述】:

需要从自定义日期时间(过去或未来)运行计时器。 Ex: Jun 15 2021 15:45:31 GMT+0530", "Tue Jun 15 2021 15:45:32 GMT+0530"(秒)

startTimer() {
    const dateTime =  new Date('2021-06-15T15:45:30');
    setInterval(() => {
      this.now = dateTime;
      this.startTimer();
    }, 1000);
  }

// 定时器不工作,它是静态的。 (Tue Jun 15 2021 15:45:31 GMT+0530)

组件:

{{ now }}

【问题讨论】:

    标签: javascript angular momentjs


    【解决方案1】:

    您需要更改this.now的实际值...

    let now = new Date('2021-06-15T15:45:30');
    
    function startTimer() {
      setInterval(() => {
        now = new Date(now.getTime() + 1000);
        console.log(now)
      }, 1000);
    }
    
    startTimer();

    上面是一个简单的 vanillaJS 版本。既然您标记了momentjs,您可能还想看看add
    或者,由于您使用的是 angular,因此您可以使用一些不错的选项来使用 rxjs 处理计时器 - 例如 intervaltimer

    【讨论】:

    • 当我在手机或windows中重置时区时,时间(现在)改变了。如何设置静态时区来停止更改?
    • javascript Date 有几个选项可以处理时区...看看这个:stackoverflow.com/questions/439630/…
    【解决方案2】:

    问题是您在使用setInterval() 启动计时器之前设置了dateTime 然后在 1 秒后再次将时间设置为同一日期。 你也不应该从setInterval() 内部调用this.startTimer();

    试试这个:

    const now =  new Date('2021-06-15T15:45:30');
    
    startTimer() {
        setInterval(() => {
          this.now.setSeconds(this.now.getSeconds() + 1)
        }, 1000);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多