如何倒计时并将时间分成几个部分?

时间:2018-01-05 14:52:49

标签: javascript

我希望对特定日期和时间(2018年1月10日,19:30)进行倒计时。这在很大程度上我能够做到。下面的代码显示剩余的天数,小时数,分钟数和秒数。

棘手的一点是要获得一定的时间段。倒计时应响应以下内容: 1.在截止日期和时间显示消息'现在上线'。这是2018年1月10日19:30。 2.同一天,但在19:30之前应该说'今晚上班' 3.截止日期前一整天(从00:00到23:59)它应该说'最后一天' 在那之前的整整几天,它应该说“要走很多天”

第1步和第2步我管理了,但是我在截止日期前一整天和之前的整整几天都遇到了问题。那是因为我无法在截止日期前(以及之前的几天)定义完整的一天。因为它在1月10日19:30之前的1天计算“1天”(因此也需要考虑19:30的小时/分钟)。

步骤1和2我在if循环中进行了管理,但我无法弄清楚如何执行第3步和第4步。第3步应该说“计算一天,但在2018年1月10日00:00之前”。因此它应该减去19:30到达januari 2018 00:00-23:59。第4步也一样。有人可以修复我的代码吗?

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

// Set the date we're counting down to
var countDownDate = new Date("Januari 10, 2018 19:30").getTime();

// Find the distance between now an the count down date
var distance = countDownDate - now;

// Time 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);

// Display the result 
this.timeleft.text = days + "d " + hours + "h " + minutes + "m " + seconds + "s ";

// countdown day 19:30
if ((days == 0) && (hours == 0) && (minutes == 0)) {
    this.countdown.text = "NOW GOING LIVE!";
    // countday day 00:00 - 19.30
} else if ((days == 0) && (hours <= 19) && (minutes <= 30)) {
    this.countdown.text = "GOING LIVE TONIGHT!";
    // 9 January 00:00 - 23:59
} else if ((days <= 1) && (hours >= 19) && (minutes >= 30)) {
    this.countdown.text = "LAST DAY";
    // days before 10 January
} else if (days >= 1) {
    this.countdown.text = "MANY DAYS TO GO";
}

2 个答案:

答案 0 :(得分:0)

由于“截止日期”是硬编码的,因此您可以对所有内容进行硬编码并最终得到一些非常简单的内容:

var now = new Date().getTime();

var lastDayThreshold = new Date("January 9, 2018 00:00").getTime();
var liveTonightThreshold = new Date("January 10, 2018 00:00").getTime();
var countDownDate = new Date("January 10, 2018 19:30").getTime();

if (now < lastDayThreshold) this.countdown.text = "MANY DAYS TO GO";
else if(now < liveTonightThreshold) this.countdown.text = "LAST DAY";
else if(now < countDownDate) this.countdown.text = "LIVE TONIGHT";
else this.countdown.text = "NOW GOING LIVE";

答案 1 :(得分:0)

亚历克斯的回答确实是我追求的。那些'treshhold时代'成功了。正在考虑改进它,因为现在我必须硬编码三个日期/时间。我希望只指定countDownDate日期/时间。然后让两个阈值日期自己计算。我试图以某种方式做到这一点,但遇到了问题。我知道如何指定一天(1000 * 60 * 60 * 24),所以我可以减去这个“oneday”值以达到前一天。但我无法计算指定时间19:30的毫秒数。为了阅读从1月10日开始到1月10日19:30的千分之一秒。如果我能够做到这一点,它会看起来像这样(虽然我知道这是不正确的,但你会得到这个想法):

var oneday = 1000 * 60 * 60 * 24;
var countDownDate = new Date("January 10, 2018 19:30").getTime();
var lastDayThreshold = new Date(countDownDate - oneday "00:00").getTime();
var liveTonightThreshold = new Date(countDownDate "00:00").getTime();

你会看到我的问题:对于lastDayTreshold我可以减去倒计时的一天但是它会考虑前一天的19:30,而不是00:00。而对于liveTonightThreshold,我也无法指定我的意思是倒计时00:00。

有没有办法做到这一点?然后我只需要指定倒计时的日期和时间,剩下的就会自己计算出来。