首页 > 解决方案 > 如何通过减去要在 timeOut 函数中使用的 2 个日期来获得剩余的毫秒数?

问题描述

我有这个代码注意事件日期是 2018-09-27 和事件 timeEnd 是 18:37

let now = new Date();
let eventEnd = new Date(
  `${this.attendanceParameters.attendance_event_date}, 
   ${this.attendanceParameters.attendance_time_end}`);

让差异 = now.getMilliseconds() - eventEnd.getMilliseconds();

但是当它应该至少在第一千位返回一些东西时,它会在百分之一的位置返回一个相对较小的数字

更新:这是完整的代码。谢谢回答!

  hostAttendance() {
    let now = new Date();
    let eventStart = new Date(
      `${this.attendanceParameters.attendance_event_date}, 
       ${this.attendanceParameters.attendance_time_start}`);
    let eventEnd = new Date(
      `${this.attendanceParameters.attendance_event_date}, 
       ${this.attendanceParameters.attendance_time_end}`);
    if (now >= eventStart && now <= eventEnd) {
      this.hostSignInAttendance();
      let difference = (+eventEnd) - (+now);
      console.log(difference);
      setTimeout(() => {
        this.hostSignOutAttendance();
      }, difference)  
    }
    else if (now > eventEnd) {

    }
    else if (now < eventStart) {
      this.alert('Event has not yet started', 'Please wait until event has concluded, thank you!', 'Ok');
    }
  }

标签: javascriptangulardatetime

解决方案


getMilliseconds返回一个介于 0 和 999 之间的数字。如,5 hours 6 minutes 7 seconds 8 milliseconds将只返回8(not 8 + 7 * 1000 + 6 * 1000 * 60 + 5 * 1000 * 60 * 60)。

要获得总毫秒数,只需+在日期前添加一个数字即可:

const date1 = new Date(...)
const date2 = new Date(...)
const diff = (+date2) - (+date1)

在上面的代码中,diff将两个时间戳之间的毫秒数。


从技术上讲,您也可以这样做date2 - date1,但这可能有点误导,因为它是一种隐式类型强制,您可能希望避免这种强制,以免在阅读我们的代码时混淆您自己和其他人。


推荐阅读