25.03.2013, 10:18
|
Новичок на форуме
|
|
Регистрация: 25.03.2013
Сообщений: 9
|
|
Динамичный подсчет времени
Добрый день. Уважаемые знатоки, очень прошу у Вас помощи.
Задача следующая: есть массив времени приезда автобуса на остановку (например: 10:00, 10:09, 10:21 и.т.д). Нужно исходя из текущего времени (например сейчас 10:04), подсчитать сколько минут до ближайшего автобуса. Исходя из этих данных ответ должен быть 5. Но через минуту чтобы он без перезагрузки страницы уже показывал 4. А после того как времени стало уже 10:10, считать до следующего значения, то есть ответ уже 11.
Очень прошу помочь.
Последний раз редактировалось afterman, 25.03.2013 в 10:29.
|
|
25.03.2013, 11:18
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
setInterval(currentTimeForBuss, 10000);
function currentTimeForBuss() {
//рассчитываем время и обновляем поле с ответом
}
Функция currentTimeForBuss будет вызываться каждые 10 секунд.
Пробуйте, пишите, поможем.
|
|
25.03.2013, 11:24
|
Новичок на форуме
|
|
Регистрация: 25.03.2013
Сообщений: 9
|
|
Спасибо за ответ. Но вы не могли бы подробнее описать именно получение даты и сравнение ее с массивом времени, и соответственно вывод остатка времени. Потому как плохо разбираюсь в JS, а сроки поджимают ))
|
|
25.03.2013, 11:35
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
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);
}
}
}
Что-то типа этого...
Последний раз редактировалось tsigel, 25.03.2013 в 11:53.
|
|
25.03.2013, 11:46
|
Новичок на форуме
|
|
Регистрация: 25.03.2013
Сообщений: 9
|
|
Большое спасибо, за помощь, но хотелось бы еще узнать если можно, вот что:
А как сравнить текущее время с временем из массива. И самое интересное когда текущее время больше отметки(ближайшего значения массива к текущему времени), как сделать так чтобы, оно далее сравнивало текущее время уже со следующим значением из массива?
|
|
25.03.2013, 12:04
|
Новичок на форуме
|
|
Регистрация: 25.03.2013
Сообщений: 9
|
|
Почему то дело до алерта:
alert('Осталось: ' + nextBussTime.minutes - time.minutes);
не доходит. В чем может быть причина?
|
|
25.03.2013, 12:06
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
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.
Последний раз редактировалось tsigel, 25.03.2013 в 12:11.
|
|
25.03.2013, 12:11
|
Новичок на форуме
|
|
Регистрация: 25.03.2013
Сообщений: 9
|
|
Огромное спасибо, но осталась какая-то странность, считает неправильно.
Потому как у меня текущее время 11:10, а показывает что осталось 40 минут. Хотя есть и в 11:30 и 11:45. Не подскажите почему так происходит?
Последний раз редактировалось afterman, 25.03.2013 в 12:15.
|
|
25.03.2013, 12:15
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
Я немного схалтурил по идее надо делать 2 цикла. Первый для нахождения часа в котором мы ждем автобус, а второй для нахождения минут. Данная функция рассчитана что в 1м часе может быть только 1 автобус (у меня 12 часов и работает)
|
|
25.03.2013, 12:19
|
Новичок на форуме
|
|
Регистрация: 25.03.2013
Сообщений: 9
|
|
Если Вам не трудно, вы не могли бы дописать скрипт как правильно, поскольку вам это будет быстро, а у меня уйдет куча времени.
С меня понятное дело плюс в карму.
Очень прошу помочь.
|
|
|
|