2013-06-18 2 views
-2

Что мне нужно - это таймер в Javascript, который отключается один раз в день в 2 часа ночи, и когда таймер уходит, будет предупреждение. Я просто не знаю, как это сделать.Как сделать таймер Javascript, который отключается один раз в день

P.S. Я ужасен в Javascript, поэтому, если бы вы могли оставить весь сценарий не только для того, чтобы что-то делать :)

+4

Добро пожаловать в [SO]; просмотрите [faq]. Важно показать [то, что вы пробовали] (http://mattgemmell.com/2008/12/08/what-have-you-tried/), чтобы мы могли предоставить вам лучшую контекстуальную информацию. – zzzzBov

+4

Вы собираетесь оставить компьютер с браузером, работающим 24 часа в сутки 7 дней, чтобы высветить сообщение посреди ночи? Я что-то пропустил? –

+1

Используйте setTimeout с предвзятостью, чтобы стрелять каждый час (делать это каждый час для учета дневного или временного изменения); если это правильный час, запустите указанную задачу. Это, как говорится, я не уверен, насколько это практично. – user2246674

ответ

1

Это должно сработать.

function alarm() { 
    alert('my alert message'); 
    setAlarm(); 
} 

function setAlarm() { 
    var date = new Date(Date.now()); 
    var alarmTime = new Date(date.getYear(), date.getMonth(), date.getDate(), 2); 
    if (date.getHours() >= 2) { 
    alarmTime.setDate(date.getDate() + 1); 
    } 
    setTimeout(alarm, alarmTime.valueOf() - Date.now()); 
} 
setAlarm(); 
+0

'setAlarm' не входит в' будильник'. Кроме того, почему тайм-аут 1s? – Bergi

+0

@Bergi - Вы правы в области. И нет лишней причины для дополнительного тайм-аута, особенно в виде блоков предупреждений в любом случае. Ред. – HandyAndyShortStack

1

Для веб-страницы javascript, чтобы выставить подсказку в определенное время в будущем, вам придется уйти браузер, на котором отображается эта страница. Javascript с веб-страниц в браузере работает только на страницах, открытых в браузере. Если это действительно то, что вы хотите сделать, то вы можете сделать это следующим образом:

// make it so this code executes when your web page first runs 
// you can put this right before the </body> tag 

<script> 
function scheduleAlert(msg, hr) { 
    // calc time remaining until the next 2am 
    // get current time 
    var now = new Date(); 

    // create time at the desired hr 
    var then = new Date(now); 
    then.setHours(hr); 
    then.setMinutes(0); 
    then.setSeconds(0); 
    then.setMilliseconds(0); 

    // correct for time after the hr where we need to go to next day 
    if (now.getHours() >= hr) { 
     then = new Date(then.getTime() + (24 * 3600 * 1000)); // add one day 
    } 

    // set timer to fire the amount of time until the hr 
    setTimeout(function() { 
     alert(msg); 
     // set it again for the next day 
     scheduleAlert(msg, hr); 
    }, then - now); 
} 

// schedule the first one 
scheduleAlert("It's 2am.", 2); 
</script> 
+0

Обратите внимание, что' setTimeout' очень неточно в течение нескольких часов. Кроме того, чтобы добавить один день, вы действительно должны * добавить 1 день * вместо добавления 86400000 мс. – Bergi

+0

@Bergi - если 'setTimeout()' не совсем точен, у вас есть лучшее решение, которое отвечает на вопрос? – jfriend00

+0

Как предложил @ user2246674, вы можете использовать несколько меньших тайм-аутов, которые настраиваются сами. Тем не менее, на самом деле я сейчас не уверен, является ли интрурация 'setTimeout' вообще или только для (неуправляемых) последовательностей. +1 для рабочего решения :-) – Bergi

Смежные вопросы