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, время: 00:08. |