|
Динамичный подсчет времени
Добрый день. Уважаемые знатоки, очень прошу у Вас помощи.
Задача следующая: есть массив времени приезда автобуса на остановку (например: 10:00, 10:09, 10:21 и.т.д). Нужно исходя из текущего времени (например сейчас 10:04), подсчитать сколько минут до ближайшего автобуса. Исходя из этих данных ответ должен быть 5. Но через минуту чтобы он без перезагрузки страницы уже показывал 4. А после того как времени стало уже 10:10, считать до следующего значения, то есть ответ уже 11. Очень прошу помочь. |
setInterval(currentTimeForBuss, 10000); function currentTimeForBuss() { //рассчитываем время и обновляем поле с ответом } Функция currentTimeForBuss будет вызываться каждые 10 секунд. Пробуйте, пишите, поможем. |
Спасибо за ответ. Но вы не могли бы подробнее описать именно получение даты и сравнение ее с массивом времени, и соответственно вывод остатка времени. Потому как плохо разбираюсь в JS, а сроки поджимают ))
|
var timeBuss = ['9:30','10:30','11:40','11:45','11:50','12:30','13:30','14:30'] setInterval(currentTimeForBuss, 10000); function currentTimeForBuss() { var date = new Date()//Получили текущую дату var time = { hours: date.getHours(), minutes: date.getMinutes() }//получили часы и минуты alert(time.hours + ':' + time.minutes); for (var i = 0; i < timeBuss.lenght-2; i++) {//Цикл по массиву с расписанием var tmp = timeBuss[i].split(':');//разбили время расписания на часы и минуты var bussTime = { hours: tmp[0], minutes: tmp[1] } tmp = timeBuss[i + 1].split(':'); var nextBussTime = { hours: tmp[0], minutes: tmp[1] } if ((time.hours >= bussTime.hours && time.hours <= nextBussTime.hours) && (time.minutes >= bussTime.minutes && time.minutes < nextBussTime.minutes)) { alert('Осталось: ' + nextBussTime.minutes - time.minutes); } } } Что-то типа этого... |
Большое спасибо, за помощь, но хотелось бы еще узнать если можно, вот что:
А как сравнить текущее время с временем из массива. И самое интересное когда текущее время больше отметки(ближайшего значения массива к текущему времени), как сделать так чтобы, оно далее сравнивало текущее время уже со следующим значением из массива? |
Почему то дело до алерта:
alert('Осталось: ' + nextBussTime.minutes - time.minutes); не доходит. В чем может быть причина? |
var timeBuss = ['9:30','10:30','11:40','11:45','11:50','12:30','13:30','14:30'] setInterval(currentTimeForBuss, 10000); function currentTimeForBuss() { var date = new Date()//Получили текущую дату var time = { hours: date.getHours(), minutes: date.getMinutes() }//получили часы и минуты alert('Текущее время: ' + (time.hours + ':' + time.minutes)); for (var i = 0; i < timeBuss.length-1; i++) {//Цикл по массиву с расписанием var tmp = timeBuss[i].split(':');//разбили время расписания на часы и минуты var bussTime = { hours: tmp[0], minutes: tmp[1] } tmp = timeBuss[i + 1].split(':'); var nextBussTime = { hours: tmp[0], minutes: tmp[1] } if ((time.hours >= bussTime.hours && time.hours <= nextBussTime.hours)) { var timeLeft = bussTime; } } alert("Осталось минут: " + (timeLeft.minutes - time.minutes)) }; currentTimeForBuss(); Неправильно написал length. |
Огромное спасибо, но осталась какая-то странность, считает неправильно.
Потому как у меня текущее время 11:10, а показывает что осталось 40 минут. Хотя есть и в 11:30 и 11:45. Не подскажите почему так происходит? |
Я немного схалтурил по идее надо делать 2 цикла. Первый для нахождения часа в котором мы ждем автобус, а второй для нахождения минут. Данная функция рассчитана что в 1м часе может быть только 1 автобус (у меня 12 часов и работает)
|
Если Вам не трудно, вы не могли бы дописать скрипт как правильно, поскольку вам это будет быстро, а у меня уйдет куча времени.
С меня понятное дело плюс в карму. Очень прошу помочь. |
Часовой пояс GMT +3, время: 23:56. |
|