Я разрабатывал панель инструментов веб-приложения, и мне было интересно, как обнаружить, что это полночь, чтобы сбросить некоторые массивы, содержащие данные из предыдущего дня, используя jquery или momentjs.Лучший способ обнаружить полночь и сбросить данные
ответ
Использование moment().format("h:mm:ss")
, которая возвращает время в формате h:mm:ss
.
var midnight = "0:00:00";
var now = null;
setInterval(function() {
now = moment().format("h:mm:ss");
if (now === midnight) {
alert("Hi");
}
$("#time").text(now);
}, 1000);
Лучше всего было бы, чтобы вычислить секунды до полуночи. Это очень просто и человек считываемый с помощью MomentJS:
// returns the number of seconds until next midnight
moment("24:00:00", "hh:mm:ss").diff(moment(), 'seconds');
Так, просто сделать:
setTimeout(
midnightTask,
moment("24:00:00", "hh:mm:ss").diff(moment(), 'seconds')
);
function midnightTask() {
/* do something */
}
Второе решение (setTimeout) не будет работать, если компьютер перейдет в режим сна и возобновит работу намного позже. В таких случаях триггер будет задерживаться примерно столько же времени, сколько компьютер, проведенный в спящем режиме. –
Я хотел бы попробовать:
window.setInterval(resetAtMidnight, 1000*5) // every five seconds
function resetAtMidnight() {
var now = new Date();
if(now.getHours() < 1
&& now.getMinutes() < 1
&& now.getSeconds() < 5) {
redrawPage();
}
};
Зачем нужно, чтобы процессор работал сложнее, чем нужно. 1000 * 5 = 5000, почему бы не просто пройти в 5000 –
Будет ли это повторяться, или просто запустить функцию один раз, после 5-секундной задержки? – gibberish
@gibberish - это будет работать только один раз, чтобы повторить вы используете 'setInterval' (или снова вызовите' setTimeout') – Jamiec
Там только действительно два пути для достижения этой
- опроса каждого х секунд и посмотреть, не находимся ли мы в пределах x секунд полуночи
- Подсчитайте время между настоящим и полуночным и спящим на это время до выполнения
(1) было продемонстрировано в других ответах, здесь (2).
Первое, что нужно сделать, это calculate the number of milliseconds until midnight, а затем использовать это как параметр для javascripts setTimeout
.
setTimeout(function(){
// whatever you want to do at midnight
}, msToMidnight);
После того, как вы закончили свою работу в этой функции, вы можете захотеть, чтобы recaculate времени до следующей полуночи и повторить процесс.
Создать дату в полночь сегодня утром, добавить 86400, а также установить тайм-аут тогда:
new Date(Date.parse((new Date()).toString().replace(/\d\d:\d\d:\d\d/,'00:00:00')) + 86400 * 1000)
Вот как вы бы использовать:
var delay_to_midnight = Date.parse((new Date()).toString().replace(/\d\d:\d\d:\d\d/,'00:00:00')) + 86400 * 1000 - Date.now()
var timeoutid = window.setTimeout(function() { alert("It's midnight!"); }, delay_to_midnight);
Так что я думаю, что вы» Повторяю это неправильно. То, что вы ищете, это не когда полночь, вы просто хотите знать, когда изменился день, что намного проще.
Первое, что я собираюсь сказать, - избегать использования таймеров любой ценой. Они не стоят того. Снижение производительности и дополнительное время процессора, которое вы используете при работе с той же функцией> 3600 раз в день, смешно, особенно когда он работает на чужом компьютере. Вы не знаете, как много он может справиться, поэтому предположите, что он не может справиться вообще. Легко пройдите на своих пользователей.
Я бы посоветовал прислушаться к событию ввода пользователя, предполагая, что это будет что-то, что у вас было бы на обычном компьютере, а не something like this, где нет ввода пользователем.
Если введенные пользователем события являются то, что вы могли бы положиться, я хотел бы сделать это ..
var today = new Date(), lastUpdate;
window.addEventListener("mousemove", function() {
var time = new Date();
// If we haven't checked yet, or if it's been more than 30 seconds since the last check
if (!lastUpdate || (time.getTime() - lastUpdate.getTime()) > 30000) {
// Set the last time we checked, and then check if the date has changed.
lastUpdate = time
if (time.getDate() !== today.getDate()) {
// If the date has changed, set the date to the new date, and refresh stuff.
today = time
this_is_where_you_would_reset_stuff()
}
}
})
Если вам абсолютно необходимо использовать таймер, то я хотел бы сделать это ..
function init() {
var today = new Date();
var midnight = new Date();
midnight.setDate(today.getDate() + 1)
midnight.setHours(0)
midnight.setMinutes(0)
setTimeout(function() {
// If the date has changed, set the date to the new date, and refresh stuff.
today = time
this_is_where_you_would_reset_stuff()
init()
}, midnight.getTime() - today.getTime())
}
init()
Имейте в виду, что второй способ, вероятно, будет гораздо менее надежным.
Проблема с этим подходом заключается в том, что эта панель мониторинга должна отображаться на мониторе, и пользователь видит только изменение данных. Но спасибо за ваше предложение –
- 1. Есть ли лучший способ завтра найти полночь?
- 2. Лучший способ создать Полночь DateTime в C#
- 3. javascript лучший способ «сбросить» массив
- 4. Лучший способ сбросить пустые переменные?
- 5. Лучший способ сбросить атрибут ActiveRecord со ссылкой
- 6. Лучший способ, чтобы получить последнюю UTC полночь Отметки времени Unix
- 7. лучший способ сбросить форму с помощью JQuery
- 8. Лучший способ извлечь данные
- 9. Лучший способ сохранить данные
- 10. Лучший способ обнаружить NaN в OpenGL шейдерах
- 11. Лучший способ обнаружить editText inputType в Android?
- 12. Лучший способ обнаружить столкновение между спрайтами?
- 13. Лучший способ обнаружить человека в WebCamTexture
- 14. Лучший способ обнаружить бота из пользовательского агента?
- 15. Лучший способ обнаружить HAML в генераторе?
- 16. Лучший способ программно обнаружить нажатие клавиши?
- 17. Лучший способ сбросить вашу javascript игру после игры, и как
- 18. Как получить часовой пояс Великобритании в PHP и обнаружить полночь?
- 19. Лучший способ обнаружить сбой приложения и перезапустить его?
- 20. Лучший способ загрузить, сохранить и перезагрузить данные
- 21. Git и двоичные данные, лучший способ хранения
- 22. Лучший способ перебрать массив и перезагрузить данные?
- 23. Лучший способ запуска своевременного события
- 24. Android: лучший способ показать данные
- 25. Лучший способ проверить hardcoded данные
- 26. Лучший способ получить огромные данные
- 27. Лучший способ включить устаревшие данные
- 28. Нужна лучший способ суммировать данные
- 29. Лучший способ загрузить удаленные данные
- 30. Лучший способ проанализировать скребковые данные
Вы говорите о сервере или клиенте? Я не уверен, что вы хотите сделать это на клиенте ... –
Я говорю о клиенте. Единственное, чего я не хочу, это обновить страницу. Например, я хочу: визуализация того, что у вас есть массив с данными, я хочу сбросить этот массив. Я также не хочу проверять (если возможно) каждые 5 секунд, если находится midnigth –
Хорошо, как вы определяете * полночь *? Это '0: 00' час? –