javascript - 没有正确倒计时

标签 javascript html date datetime

我正在创建一个倒计时网站。我希望它从我的庆祝日期的当前时间开始倒计时 2019-11-29 00:00:00 .我希望时区在澳大利亚布里斯类时区。但是,它似乎一直在计算离我的庆祝日期还剩多少时间是错误的。有人可以告诉我我做错了什么吗?一旦时间达到 0,我怎样才能摆脱倒计时并将其替换为 <a href="party.html">Its celebration time</a>

function dateDiff(a, b) {
    // Some utility functions:
    const getSecs = dt => (dt.getHours() * 24 + dt.getMinutes()) * 60 + dt.getSeconds();
    const getMonths = dt => dt.getFullYear() * 12 + dt.getMonth();

    // 0. Convert to new date objects to avoid side effects
    a = new Date(a);
    b = new Date(b);
    if (a > b) [a, b] = [b, a]; // Swap into order 
    
    // 1. Get difference in number of seconds during the day:
    let diff = getSecs(b) - getSecs(a);
    if (diff < 0) {
        b.setDate(b.getDate()-1); // go back one day
        diff += 24*60*60; // compensate with the equivalent of one day
    }
    // 2. Get difference in number of days of the month
    let days = b.getDate() - a.getDate();
    if (days < 0) {
        b.setDate(0); // go back to (last day of) previous month
        days += b.getDate(); // compensate with the equivalent of one month
    }
    // 3. Get difference in number of months
    const months = getMonths(b) - getMonths(a); 
    return {
        years: Math.floor(months/12),
        months: months % 12,
        days, 
        hours: Math.floor(diff/3600),
        minutes: Math.floor(diff/60) % 24,
        seconds: diff % 60
    };
}

// Date to start on
var celebrationDate = new Date("2019-11-29 00:00:00").toLocaleString("en-US", {timeZone: "Australia/Brisbane"});

// Update the count every 1 second
!function refresh () {
    const diff = dateDiff(new Date().toLocaleString("en-US", {timeZone: "Australia/Brisbane"}), celebrationDate);
    document.getElementById("day-val").innerHTML = diff[Object.keys(diff)[2]];
    document.getElementById("hour-val").innerHTML = diff[Object.keys(diff)[3]];
    document.getElementById("min-val").innerHTML = diff[Object.keys(diff)[4]];
    document.getElementById("sec-val").innerHTML = diff[Object.keys(diff)[5]];
    setTimeout(refresh, 1000)
}()
<div id="day-val"></div><div>Days</div><br>
<div id="hour-val"></div><div>Hours</div><br>
<div id="min-val"></div><div>Minutes</div><br>
<div id="sec-val"></div><div>Seconds</div>

最佳答案

如果您正在使用 moment.js

您可以使用 diffduration 函数,如下所示:

const now = moment();
const celebrationDate= moment("2019-11-30 00:00:00");

// this will get the difference between now and celebrationDate
const celebrationDateDiff = expiration.diff(now);

// convert it into duration
const duration = moment.duration(celebrationDateDiff);

然后您可以像这样访问倒计时:

duration.days() // will return the number of days
duration.hours() // will return the number of remaining  hours
duration.minutes() // will return the number of remaining minutes

关于javascript - 没有正确倒计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59083499/

相关文章:

javascript - 如何在 JavaScript 或 jQuery 中过滤 JSON 数据?

javascript - Highcharts Highmap 世界 - 为大陆内的所有国家着色

javascript - 如何判断 Google 电子表格的 Google Apps 脚本中两个单元格是否相等

php - 如果我在 url 中有 2 `/`,则不会加载 Css

javascript - 如果用户没有将 http 添加到他们的链接中

javascript - 在 Eslint 配置文件中禁用报价规则

javascript - HTML5 Canvas 文本中支持的字体

java - 如何将参数的日期转换为日期格式 yyyyMMdd

mysql - 返回时间大于 22 :00 and smaller than 06:00 for group of different timestamps 的 MySql 查询

javascript - 与使用 javascript Date() 的 Chrome、FF 相比,Safari 中的时区不正确