Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.03.2013, 10:18
Новичок на форуме
Отправить личное сообщение для afterman Посмотреть профиль Найти все сообщения от afterman
 
Регистрация: 25.03.2013
Сообщений: 9

Динамичный подсчет времени
Добрый день. Уважаемые знатоки, очень прошу у Вас помощи.

Задача следующая: есть массив времени приезда автобуса на остановку (например: 10:00, 10:09, 10:21 и.т.д). Нужно исходя из текущего времени (например сейчас 10:04), подсчитать сколько минут до ближайшего автобуса. Исходя из этих данных ответ должен быть 5. Но через минуту чтобы он без перезагрузки страницы уже показывал 4. А после того как времени стало уже 10:10, считать до следующего значения, то есть ответ уже 11.

Очень прошу помочь.

Последний раз редактировалось afterman, 25.03.2013 в 10:29.
Ответить с цитированием
  #2 (permalink)  
Старый 25.03.2013, 11:18
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

setInterval(currentTimeForBuss, 10000);
function currentTimeForBuss() {
//рассчитываем время и обновляем поле с ответом
}


Функция currentTimeForBuss будет вызываться каждые 10 секунд.
Пробуйте, пишите, поможем.
Ответить с цитированием
  #3 (permalink)  
Старый 25.03.2013, 11:24
Новичок на форуме
Отправить личное сообщение для afterman Посмотреть профиль Найти все сообщения от afterman
 
Регистрация: 25.03.2013
Сообщений: 9

Спасибо за ответ. Но вы не могли бы подробнее описать именно получение даты и сравнение ее с массивом времени, и соответственно вывод остатка времени. Потому как плохо разбираюсь в JS, а сроки поджимают ))
Ответить с цитированием
  #4 (permalink)  
Старый 25.03.2013, 11:35
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 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.
Ответить с цитированием
  #5 (permalink)  
Старый 25.03.2013, 11:46
Новичок на форуме
Отправить личное сообщение для afterman Посмотреть профиль Найти все сообщения от afterman
 
Регистрация: 25.03.2013
Сообщений: 9

Большое спасибо, за помощь, но хотелось бы еще узнать если можно, вот что:

А как сравнить текущее время с временем из массива. И самое интересное когда текущее время больше отметки(ближайшего значения массива к текущему времени), как сделать так чтобы, оно далее сравнивало текущее время уже со следующим значением из массива?
Ответить с цитированием
  #6 (permalink)  
Старый 25.03.2013, 12:04
Новичок на форуме
Отправить личное сообщение для afterman Посмотреть профиль Найти все сообщения от afterman
 
Регистрация: 25.03.2013
Сообщений: 9

Почему то дело до алерта:
alert('Осталось: ' + nextBussTime.minutes - time.minutes);

не доходит. В чем может быть причина?
Ответить с цитированием
  #7 (permalink)  
Старый 25.03.2013, 12:06
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 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.
Ответить с цитированием
  #8 (permalink)  
Старый 25.03.2013, 12:11
Новичок на форуме
Отправить личное сообщение для afterman Посмотреть профиль Найти все сообщения от afterman
 
Регистрация: 25.03.2013
Сообщений: 9

Огромное спасибо, но осталась какая-то странность, считает неправильно.
Потому как у меня текущее время 11:10, а показывает что осталось 40 минут. Хотя есть и в 11:30 и 11:45. Не подскажите почему так происходит?

Последний раз редактировалось afterman, 25.03.2013 в 12:15.
Ответить с цитированием
  #9 (permalink)  
Старый 25.03.2013, 12:15
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Я немного схалтурил по идее надо делать 2 цикла. Первый для нахождения часа в котором мы ждем автобус, а второй для нахождения минут. Данная функция рассчитана что в 1м часе может быть только 1 автобус (у меня 12 часов и работает)
Ответить с цитированием
  #10 (permalink)  
Старый 25.03.2013, 12:19
Новичок на форуме
Отправить личное сообщение для afterman Посмотреть профиль Найти все сообщения от afterman
 
Регистрация: 25.03.2013
Сообщений: 9

Если Вам не трудно, вы не могли бы дописать скрипт как правильно, поскольку вам это будет быстро, а у меня уйдет куча времени.

С меня понятное дело плюс в карму.
Очень прошу помочь.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт обратного отсчета времени Extremal1989 Общие вопросы Javascript 13 30.12.2012 11:47
Циклический отсчет времени Vor Серверные языки и технологии 0 24.02.2012 02:56
вывод времени php + javascript TTongorovortoto Ваши сайты и скрипты 2 29.10.2011 00:11
В зависимости от локального времени меняется задний фон Tchort Events/DOM/Window 3 09.08.2011 18:21
Обратный отсчет времени tenorica Общие вопросы Javascript 2 19.04.2011 23:30