Динамичный подсчет времени
Добрый день. Уважаемые знатоки, очень прошу у Вас помощи.
Задача следующая: есть массив времени приезда автобуса на остановку (например: 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 часов и работает)
|
Если Вам не трудно, вы не могли бы дописать скрипт как правильно, поскольку вам это будет быстро, а у меня уйдет куча времени.
С меня понятное дело плюс в карму. Очень прошу помочь. |
var timeBuss = ['9:30', '10:30', '11:40', '11:45', '11:50', '12:10', '12:30', '12:41', '12:52', '12:55', '13:10'] setInterval(currentTimeForBuss, 5000); function currentTimeForBuss() { var date = new Date()//Получили текущую дату var time = { hours:date.getHours(), minutes:date.getMinutes() }//получили часы и минуты console.log(time.hours + ':' + time.minutes); for (var i = 0; i < timeBuss.length - 1; i++) {//Цикл по массиву с расписанием var tmp = timeBuss[i].split(':');//разбили время расписания на часы и минуты var bussTime = {//время в расписании (номер i) hours:tmp[0], minutes:tmp[1] } tmp = timeBuss[i + 1].split(':'); var nextBussTime = {//следующее время в расписании (i + 1) hours:tmp[0], minutes:tmp[1] } if ((time.hours >= bussTime.hours && time.hours <= nextBussTime.hours) && (time.minutes >= bussTime.minutes && time.minutes < nextBussTime.minutes)) { var timeLeft = nextBussTime; break; } } console.log(timeLeft) if (time.hours < timeLeft.hours) { timeLeft.minutes = parseInt(timeLeft.minutes) + 60; } alert('Осталось минут: ' + (timeLeft.minutes - time.minutes)); }; currentTimeForBuss(); |
Не переходит на следующую отметку, после того как 11:45 закончилось(алерт не показывается).
В консоле вот такая ошибка: Uncaught TypeError: Cannot read property 'hours' of undefined 1.html:32 currentTimeForBuss 32 строка это if (time.hours < timeLeft.hours) { Если обновить страницу, то находит уже 11:50 и все работает. Может знаете, как сделать чтобы без перезагрузки страницы сделать переход на следующую отметку? |
я обновил.
|
Всем большое спасибо! Отблагодарил плюсами в карму :)
|
Появилась подзадача для этого скрипта. Имеется цикл который вызывает этот скрипт (используется вариант Дзен-трансгуманиста) для определения времени ближайшего автобуса.
Сейчас он считает только для первого раза. Для остальных не работает. Очень прошу помочь! |
Нужна помощь в доведении скрипта размещенного выше.
Пишу на jquery mobile расписание автобусов. Хотелось бы использовать вышеописанный скрипт для подсчета времени до прибытия автобуса. Отсюда и вопрос, данный пример работает с определенным массивом, указанным в скрипте, но верстка с query mobile подразумевает один большой код с разбивкой на страницы. Вставлять этот код на каждую страницу со своим массивом глупо и не оправдано. Может подскажете как использовать это скрипт один раз для всех страниц, с подгрузкой нужной строки (расписание автобуса на конкретной остановке) из файла данных в массив и вызов функции подсчета с конкретным массивом уже непосредственно в коде страницы? <!doctype html> <html> <head> <title>My Page</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.3/jquery.mobile-1.4.3.min.css"> <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script> <script src="http://code.jquery.com/mobile/1.4.3/jquery.mobile-1.4.3.min.js"></script> <script> var timeBuss = ['9:30','10:30','11:40','11:45','11:50','12:30','13:20','14:06','14:56','15:06','15:36','16:16','16:43','17:06','17:23','17:34','17:52','18:04','18:10','19:06','19:36','20:06','20:35','21:08','21:31','22:08','22:26','22:53','23:26','23:59','00:06'] setInterval(currentTimeForBuss, 60); function currentTimeForBuss() { var date = new Date()//Получили текущую дату var time = { hours: date.getHours(), minutes: date.getMinutes(), seconds: date.getSeconds() }//получили часы и минуты document.getElementById("current_time").innerHTML = ('Текущее время: ' + (time.hours + ':' + time.minutes + ':' + time.seconds)); 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; } } document.getElementById("nextbusleft").innerHTML = ("Осталось минут: " + (timeLeft.minutes - time.minutes)) }; currentTimeForBuss(); </script> </head> <body> <div data-role="page"> <div data-role="content"> <ul data-role="listview"> <li><a href="#second_page">Маршрут №1</a></li> </ul> </div><!-- /content --> </div><!-- /page --> <div data-role="page" id="second_page"> <div data-role="content"> <ul data-role="listview"> <li><a href="#busstop_1_1">Конечная 1 — Конечная 2</a></li> <li><a href="#busstop_1_2">Конечная 2 — Конечная 1</a></li> </ul> </div><!-- /content --> </div><!-- /page --> <div data-role="page" id="busstop_1_1"> <div data-role="content"> <ul data-role="listview"> <li><a href="#schedule_1_1">Остановка 1</a></li> <li><a href="#schedule_1_2">Остановка 2</a></li> </ul> </div><!-- /content --> </div><!-- /page --> <div data-role="page" id="schedule_1_1"> <div data-role="content"> <div id="schedule">'9:30','10:30','11:40','11:45','11:50','12:30','13:20','14:06','14:56','15:06','15:06','16:06','16:06','17:06','23:59','00:06'</div> <div id="current_time"></div> <div id="nextbusleft"></div> </div><!-- /content --> </div><!-- /page --> </div> </body> </html> |
Не надо дергать функцию расчета времени каждые 60 милисекунд. Дергайте хотя бы раз в секунду (1000 мс)
Я исправил код так, что функция принимает массив, по которому будет считать время прибытия. Вообще код иногда даёт странные результаты, но я думаю вы справитесь :) Вызываем timerCurrentBuss и передаём туда массив времени. <!doctype html> <html> <head> <title>My Page</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.3/jquery.mobile-1.4.3.min.css"> <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script> <script src="http://code.jquery.com/mobile/1.4.3/jquery.mobile-1.4.3.min.js"></script> <script> var timeBuss = ['9:30','10:30','11:40','11:45','11:50','12:30','13:20','14:06','14:56','15:06','15:36','16:16','16:43','17:06','17:23','17:34','17:52','18:04','18:10','19:06','19:36','20:06','20:35','21:08','21:31','22:08','22:26','22:53' ,'23:26','23:59','00:06'] function timerCurrentBuss(time) { var timeBuss = time; setInterval(currentTimeForBuss, 60); function currentTimeForBuss() { var date = new Date()//Получили текущую дату var time = { hours: date.getHours(), minutes: date.getMinutes(), seconds: date.getSeconds() }//получили часы и минуты document.getElementById("current_time").innerHTML = ('Текущее время: ' + (time.hours + ':' + time.minutes + ':' + time.seconds)); 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; } } document.getElementById("nextbusleft").innerHTML = ("Осталось минут: " + (timeLeft.minutes - time.minutes)) }; } timerCurrentBuss(timeBuss); </script> </head> <body> <div data-role="page"> <div data-role="content"> <ul data-role="listview"> <li><a href="#second_page">Маршрут №1</a></li> </ul> </div><!-- /content --> </div><!-- /page --> <div data-role="page" id="second_page"> <div data-role="content"> <ul data-role="listview"> <li><a href="#busstop_1_1">Конечная 1 — Конечная 2</a></li> <li><a href="#busstop_1_2">Конечная 2 — Конечная 1</a></li> </ul> </div><!-- /content --> </div><!-- /page --> <div data-role="page" id="busstop_1_1"> <div data-role="content"> <ul data-role="listview"> <li><a href="#schedule_1_1">Остановка 1</a></li> <li><a href="#schedule_1_2">Остановка 2</a></li> </ul> </div><!-- /content --> </div><!-- /page --> <div data-role="page" id="schedule_1_1"> <div data-role="content"> <div id="schedule">'9:30','10:30','11:40','11:45','11:50','12:30','13:20','14:06','14:56','15:06','15:06','16:06','16:06','17:06','23:59','00:06'</div> <div id="current_time"></div> <div id="nextbusleft"></div> </div><!-- /content --> </div><!-- /page --> </div> </body> </html> |
<!DOCTYPE html> <html ng-app="app"> <head> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script> <meta charset="utf-8"> <title>Расписание</title> <script> angular.module("app", []) .controller('TabsDemoCtrl',function($scope,$http){ $scope.string = '12:00, 12:10, 12:35, 13:07'; $scope.arrString = new Array(); $scope.arrString = $scope.string.split(','); console.log($scope.arrString) }); </script> </head> <body> <ul ng-controller="TabsDemoCtrl"> <li ng-repeat="bustime in arrString track by $index"> {{bustime}} (Тут условие, если текущее время < {{bustime}}, то показывать оставшееся время, если >, то "Автобус ушел" </li> </ul> </body> </html> Всем доброго дня! Если у кого-то будет возможность и время, помогите решить задачу с расписанием. Данные по автобусам получаю в формате JSON (в примере ввел вручную), потом разбиваю на строчки массив разделенный запятой. Хотелось бы чтобы рядом с каждым временем шел подсчет оставшегося времени до автобуса и/или фраза о том, что автобус уже ушел. |
как правильно написать данный код и как обновляют данные в angular?
<!DOCTYPE html> <html ng-app="app"> <head> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script> <meta charset="utf-8"> <title>Расписание</title> <script> var c = { formatTime: function(b) { b = Math.floor(b / 1E3); var a = Math.floor(b / 60), d = Math.floor(a / 60); b %= 60; a %= 60; return c.two(d % 24) + " час. " + c.two(a) + " мин. " + c.two(b) + " сек. " }, two: function(b) { return (9 < b ? "" : "0") + b } }; angular.module("app", []).controller("TabsDemoCtrl", function($scope, $http) { $scope.json = '["12:00", "12:10", "12:35", "23:37"]'; $scope.arrString = JSON.parse($scope.json); $scope.myArray = []; $scope.fn = function () { $scope.myArray = []; angular.forEach($scope.arrString, function(el) { el = el.match(/\d+/g); var date = new Date; date.setHours(+el[0], +el[1],0,0); date = date.getTime() - (new Date).getTime(); $scope.myArray.push(date < 0 ? "Автобус ушел" : "Осталось : " + c.formatTime(date)); }) console.log($scope.myArray) window.setTimeout($scope.fn,1000)//не смог сделать вывод новых данных } $scope.fn() }); </script> </head> <body> <ul ng-controller="TabsDemoCtrl"> <li ng-repeat="bustime in arrString track by $index"> {{bustime + ' ' +myArray[$index]}} </li> </ul> </body> </html> |
Цитата:
["12:00", "12:10", "12:35", "23:37"] Я все упростил для примера, чтобы передать саму суть |
Цитата:
|
kingstakh,
лучше бы вы сразу в той теме написали :) думаю и тут заметят. |
Цитата:
|
kingstakh,
ок. |
Цитата:
Хорошая новость, что в приложении обновление данных работает, то есть идет обратный отсчет времени. Плохая, данные JSON у меня не разделяются кавычками. То есть в примере: $scope.json = '["12:00", "12:10", "12:35", "23:37"]'; А у меня: $scope.json = '["12:00, 12:10, 12:35, 23:37"]'; Где исправить код, чтобы работало с моей строкой? :blink: Решено, додумался, спасибо! |
Может кому-то понадобиться, мой вариант
<!DOCTYPE html> <html ng-app="app"> <head> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script> <meta charset="utf-8"> <title>Расписание</title> <script> var c = { formatTime: function(b) { b = Math.floor(b / 1E3); var a = Math.floor(b / 60), d = Math.floor(a / 60); b %= 60; a %= 60; return c.two(d % 24) + " час. " + c.two(a) + " мин. " + c.two(b) + " сек. " }, two: function(b) { return (9 < b ? "" : "0") + b } }; angular.module("app", []) //Часы .controller("TimeCtrl", function($scope, $interval) { var tick = function() { $scope.clock = Date.now(); } tick(); $interval(tick, 1000); }) .controller("TabsDemoCtrl", function($scope) { $scope.json = '6:00, 8:45, 12:00, 12:10, 12:35, 23:37'; // Парсинг в другом контроллере, поэтому данные имеют такой вид $scope.arrString = new Array(); $scope.arrString = $scope.json.split(','); $scope.myArray = []; $scope.fn = function () { $scope.myArray = []; angular.forEach($scope.arrString, function(el) { el = el.match(/\d+/g); var date = new Date; date.setHours(+el[0], +el[1],0,0); date = date.getTime() - (new Date).getTime(); $scope.myArray.push(date < 0 ? "Автобус ушел" : "Осталось : " + c.formatTime(date)); }) console.log($scope.myArray) window.setTimeout($scope.fn,1000) // Вывод данных в приложении работает } $scope.fn() }); </script> </head> <body> <h3 ng-controller="TimeCtrl">Сейчас {{ clock | date:'HH:mm:ss'}}</h3> <ul ng-controller="TabsDemoCtrl"> <li ng-repeat="bustime in arrString track by $index"> {{bustime + ' ' +myArray[$index]}} </li> </ul> </body> </html> |
kingstakh,
хотелось бы увидеть обновление времени или узнать почему в посте 20 не работает вывод времени. |
Цитата:
А нет, jQuery не играет роли, у меня еще контроллер текущего времени есть, с ним и здесь все заработало |
Рабочий вариант с $interval
<!DOCTYPE html> <html ng-app="app"> <head> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script> <meta charset="utf-8"> <title>Расписание</title> <script> var c = { formatTime: function(b) { b = Math.floor(b / 1E3); var a = Math.floor(b / 60), d = Math.floor(a / 60); b %= 60; a %= 60; return c.two(d % 24) + " час. " + c.two(a) + " мин. " + c.two(b) + " сек. " }, two: function(b) { return (9 < b ? "" : "0") + b } }; angular.module("app", []) .controller("TabsDemoCtrl", function($scope, $interval) { $scope.json = '6:00, 8:45, 12:00, 12:10, 12:35, 23:37'; // Парсинг в другом контроллере, поэтому данные имеют такой вид $scope.arrString = new Array(); $scope.arrString = $scope.json.split(','); $scope.myArray = []; var tick = function() { $scope.clock = Date.now(); } tick(); $interval(tick, 1000); $scope.fn = function () { $scope.myArray = []; angular.forEach($scope.arrString, function(el) { el = el.match(/\d+/g); var date = new Date; date.setHours(+el[0], +el[1],0,0); date = date.getTime() - (new Date).getTime(); $scope.myArray.push(date < 0 ? "Автобус ушел" : "Осталось : " + c.formatTime(date)); }) console.log($scope.myArray) window.setTimeout($scope.fn,1000) // Вывод данных в приложении работает } $scope.fn() }); </script> </head> <body> <ul ng-controller="TabsDemoCtrl"> <li ng-repeat="bustime in arrString track by $index"> {{bustime + ' ' +myArray[$index]}} </li> </ul> </body> </html> |
Цитата:
<!DOCTYPE html> <html ng-app="app"> <head> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script> <meta charset="utf-8"> <title>Расписание</title> <script> var c = { formatTime: function(b) { b = Math.floor(b / 1E3); var a = Math.floor(b / 60), d = Math.floor(a / 60); b %= 60; a %= 60; return c.two(d % 24) + " час. " + c.two(a) + " мин. " + c.two(b) + " сек. " }, two: function(b) { return (9 < b ? "" : "0") + b } }; angular.module("app", []) //Часы .controller("TimeCtrl", function($scope, $interval) { var tick = function() { $scope.clock = Date.now(); } tick(); $interval(tick, 1000); }) .controller("TabsDemoCtrl", function($scope) { $scope.work = '6:00, 8:45, 12:00, 12:10, 12:35, 23:37'; // Рабочие дни $scope.weekend = '6:00, 8:45, 12:00, 12:10, 12:35, 23:37'; // Выходные дни $scope.arrString = new Array(); $scope.arrString = $scope.work.split(','); $scope.myArray = []; $scope.fn = function () { $scope.myArray = []; angular.forEach($scope.arrString, function(el) { el = el.match(/\d+/g); var date = new Date; date.setHours(+el[0], +el[1],0,0); date = date.getTime() - (new Date).getTime(); $scope.myArray.push(date < 0 ? "Автобус ушел" : "Осталось : " + c.formatTime(date)); }) console.log($scope.myArray) window.setTimeout($scope.fn,1000) // Вывод данных в приложении работает } $scope.fn() }); </script> </head> <body> <h3 ng-controller="TimeCtrl">Сейчас {{ clock | date:'HH:mm:ss'}}</h3> <ul ng-controller="TabsDemoCtrl"> <li ng-repeat="bustime in arrString track by $index"> {{bustime + ' ' +myArray[$index]}} </li> </ul> <ul ng-controller="TabsDemoCtrl"> Здесь для выходных дней <li ng-repeat="bustime in arrString track by $index"> {{bustime + ' ' +myArray[$index]}} </li> </ul> </body> </html> |
kingstakh,
<!DOCTYPE html> <html ng-app="app"> <head> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script> <meta charset="utf-8"> <title>Расписание</title> <script> var c = { formatTime: function(b) { b = Math.floor(b / 1E3); var a = Math.floor(b / 60), d = Math.floor(a / 60); b %= 60; a %= 60; return c.two(d % 24) + " час. " + c.two(a) + " мин. " + c.two(b) + " сек. " }, two: function(b) { return (9 < b ? "" : "0") + b } }; angular.module("app", []) //Часы .controller("TimeCtrl", function($scope, $interval) { var tick = function() { $scope.clock = Date.now(); } tick(); $interval(tick, 1000); }) .controller("TabsDemoCtrl", function($scope) { $scope.work = '6:00, 8:45, 12:00, 12:10, 12:35, 23:37'; // Рабочие дни $scope.weekend = '6:00, 8:45, 13:00, 14:10, 15:35, 23:50'; // Выходные дни $scope.fn = function () { function foo(data) { var el = data.match(/\d+/g); var date = new Date; date.setHours(+el[0], +el[1],0,0); date = date.getTime() - (new Date).getTime(); return data + ' ' + (date < 0 ? "Автобус ушел" : "Осталось : " + c.formatTime(date)); } $scope.myArray = $scope.work.split(',').map(foo) $scope.arrString = $scope.weekend.split(',').map(foo) window.setTimeout($scope.fn,1000) // Вывод данных в приложении работает } $scope.fn() }); </script> </head> <body> <h3 ng-controller="TimeCtrl">Сейчас {{ clock | date:'HH:mm:ss'}}</h3> <ul ng-controller="TabsDemoCtrl"> <li ng-repeat="bustime in myArray track by $index"> {{bustime}} </li> </ul> <ul ng-controller="TabsDemoCtrl"> Здесь для выходных дней <li ng-repeat="bustime in arrString track by $index"> {{bustime}} </li> </ul> </body> </html> |
А не проще ли всё перевести в минуты (и расписание, и текущее время), а при отображении опять перевести в формат "чч:мм"?
|
Keramet,
не понял, может вы код напишите? |
рони,
я б с удовольствием, но пока только учусь )) и на ваших примерах тоже. Мне просто кажется, проще представить всё в минутах от начала суток (от 0 до 1440), чтоб не разбирать время отдельно на часы и минуты. Например массив '6:00, 8:45, 12:00, 12:10, 12:35, 23:37' будет выглядеть как "360, 525, 720, 730, 755, 1417". Текущее время, например, 11:40 будет 700. Ну это только идея |
Keramet,
ещё труднее по моему будет. |
Цитата:
Определить место текущего времени в массиве расписания (переведенное в минуты) тоже просто, посчитали разницу до соседнего элемента и перевели это время обратно в "чч:мм". а возиться с часами отдельно и с минутами сложнее. ИМХО ну, профессору виднее :) |
Цитата:
|
Цитата:
var nowTime = new Date(); var nowTimeF = 60*nowTime.getHours() + nowTime.getMinutes(); var hours = ['6:00', '8:45', '12:00', '12:10', '12:35', '23:37']; function formatT(str){ var i, h, m; i = str.indexOf(":"); h = str.substring(0, i); m = str.substring(i + 1, str.length); return 60*h + 1*m; } var hoursF = hours.map(function(h) {return formatT(h);}); if (nowTimeF > hoursF[hoursF.length]) alert ("Опять от меня сбежала последняя электричка...") else { for(var i = hoursF.length - 1; i >= 1; i--) { if (nowTimeF > hoursF[i-1]) break; } var timeToGo = hoursF[i] - nowTimeF; alert("До отправления: " + Math.floor(timeToGo / 60) + "ч " + timeToGo % 60 + "мин"); }; не так и просто, как мне казалось :thanks: |
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 02:41. |