制作带日期时间的闹钟

时间:2017-03-11 16:56:30

标签: javascript date time

我正在尝试制作一个闹钟,它会在完成时发出声音。因此,例如,我设置警报应该从18:00:00开始并且当前时间为17:59:00的时间,因此基本上警报应该在1分钟内启动。

我尝试过这样做。:

var x = '18:00:00';
var t = new Date(x) - new Date();
setTimeout(function(){ alert("Hello"); }, t);

这不起作用,不知道为什么。错误是NaN

3 个答案:

答案 0 :(得分:6)

您的问题是定义x的方式。代码背后的逻辑是可靠的,但是你需要使用一些合理的智能日期时间操作来实现这一点。例如,让我们将闹钟设置为从加载页面开始的五秒钟:



x = new Date();
x.setSeconds(x.getSeconds() + 5);
var t = new Date(x) - new Date();
setTimeout(function(){ alert("Hello"); }, t);




我建议您查看Date并找出解决问题所需的逻辑和方法。

粗略解决方案

仅基于小时数的警报逻辑应该是这样的:

  • 使用当前日期,月份等,从闹钟时间的HH:mm:ss创建一个虚拟日期。
  • new Date()比较,看它是在当前日期之前还是之后。
  • 如果在当前日期之前,则将x设置为明天,并将HH:mm:ss设置为。
  • 否则设置为今天和HH:mm:ss。
  • 减去日期并处理警报。

以下代码演示了如何实现此目的:



var x = {
  hours: 18,
  minutes: 0,
  seconds: 0
};

var dtAlarm = new Date();
dtAlarm.setHours(x.hours);
dtAlarm.setMinutes(x.minutes);
dtAlarm.setSeconds(x.seconds);
var dtNow = new Date();

if (dtAlarm - dtNow > 0) {
  console.log('Later today, no changes needed!');
}
else {
  console.log('Tomorrow, changing date to tomorrow');
  dtAlarm.setDate(dtAlarm.getDate() + 1);
}

var diff = dtAlarm - new Date();
setTimeout(function(){ alert("Hello"); }, diff);




注意:

  • HH:mm:ss是指小时:分钟:秒格式(有关详情,请参阅here)。
  • 我也使用了一个对象代替x来简化转换。您可以从字符串轻松构建对象。

答案 1 :(得分:3)

这样的事情:

var start = '2017/03/11 12:00:00';
var end = '2017/03/11 12:00:02';

// time in milliseconds:
var time =  Math.abs(new Date(start) - new Date(end));

setTimeout(function(){ 
    alert("Hello"); 
}, time);

答案 2 :(得分:2)

我希望这会让你清楚地了解你现在拥有的以及如何做到这一点,但有很多方法可以做到这一点,我只是想让你更容易。

let x = "01:10:30"; //any value you will pass
let date1 = new Date();

//split your x string into hours,minutes and seconds
date1.setHours(x.split(":")[0]); //set hours
date1.setMinutes(x.split(":")[1]); //set minutes
date1.setSeconds(x.split(":")[2]); //set seconds

let t = date1 - new Date();

setTimeout(function(){alert('Hello')},t)