Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Динамичный подсчет времени (https://javascript.ru/forum/misc/36700-dinamichnyjj-podschet-vremeni.html)

afterman 25.03.2013 10:18

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

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

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

tsigel 25.03.2013 11:18

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


Функция currentTimeForBuss будет вызываться каждые 10 секунд.
Пробуйте, пишите, поможем.

afterman 25.03.2013 11:24

Спасибо за ответ. Но вы не могли бы подробнее описать именно получение даты и сравнение ее с массивом времени, и соответственно вывод остатка времени. Потому как плохо разбираюсь в JS, а сроки поджимают ))

tsigel 25.03.2013 11:35

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);
    }
  }
}

Что-то типа этого...

afterman 25.03.2013 11:46

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

А как сравнить текущее время с временем из массива. И самое интересное когда текущее время больше отметки(ближайшего значения массива к текущему времени), как сделать так чтобы, оно далее сравнивало текущее время уже со следующим значением из массива?

afterman 25.03.2013 12:04

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

не доходит. В чем может быть причина?

tsigel 25.03.2013 12:06

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.

afterman 25.03.2013 12:11

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

tsigel 25.03.2013 12:15

Я немного схалтурил по идее надо делать 2 цикла. Первый для нахождения часа в котором мы ждем автобус, а второй для нахождения минут. Данная функция рассчитана что в 1м часе может быть только 1 автобус (у меня 12 часов и работает)

afterman 25.03.2013 12:19

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

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


Часовой пояс GMT +3, время: 12:57.