Javascript.RU

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

Разница между часами + тарифы
У меня такое дело, я работаю в анти-кафе. Тема такая: человек заходит мы ему даем карточку на которой час когда он к нам зашел. Когда выходит, мы соответственно смотрим на час и считаем сколько времени он у нас провел и умножаем количество минут на 10 (с 02:00 до 18:00) и на 17 (с 18:00 - 02:00).

Я хочу это автоматизировать. Чтобы вбивать только час когда человек зашел а код брал время автомат, вычеслял количество минут и умножал на соответствующий тариф.

Раньше на этом форуме находил что-то похожее (считывает сколько минут прошло после ДАТЫ, а мне нужно с часа) но не смог адаптировать под свои нужды.

<!DOCTYPE html>
<html>
Enter date - <b>m-m-dy</b> <br>
<input type = "date" value="2014-12-21" onclick="do_it(this)">
<br>
Action <b>Nothing yet</b>
<script>
// кэш
reg = /\d{4}-\d{2}-\d{2}/;
k = 1/(1000*60*60) ;

function do_it(el){
/*проверка на соответствие шаблону*/
if ( !reg.test(el.value) ) {alert('err');return}
var now = new Date(); // текущее время
var fut = Date.parse( el.value ); // введенное время
var delta = fut - now; // разница во времени ( в миллисекундах)
var back = delta < 0; // TRUE, если время уже прошло. FALSE, если оно еще не наступило
// т.к. в delta может быть и отрицательное число, то берем модуль, делим на 1000 и на 3600 ( после 1000 получаются секунды,после 3600 - часы) и потом округляем до двух знаков после запятой

var d = (Math.abs(delta)*k).toFixed(2);

// тут формирование строки. в d у нас количество часов

var str = '';
if( back) str = " was " + d + " hours ago";
else str = " will be in" + d + " hours.";
// это я щак нашел элемент,куда записывать строку (увы,лучше придумать не мог )
el.parentNode.children[4].innerHTML = str;
}
</script>

<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
</body>
</html>


Помогите пожалуйста. Заранее спс
Ответить с цитированием
  #2 (permalink)  
Старый 21.12.2014, 18:10
Новичок на форуме
Отправить личное сообщение для gevtiman Посмотреть профиль Найти все сообщения от gevtiman
 
Регистрация: 21.12.2014
Сообщений: 2

Ой да, время сорри ))) Скажем 13:25
Ответить с цитированием
  #3 (permalink)  
Старый 22.12.2014, 15:01
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,153

Rise,где - то на форуме есть вариант решения подобной задачи, делал но никак ненайду был простой цикл наращивания минут и прибавления к сумме -- если часы совпадали с отметкой в обьекте цена минуты менялась когда часы и минуты совпадали с текущими цикл останавливался выдавал результат -- из расчёта присутствия не более одних суток

Последний раз редактировалось рони, 22.12.2014 в 15:09.
Ответить с цитированием
  #4 (permalink)  
Старый 22.12.2014, 15:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,153

Rise,
таки нашёл )))
Пересчитать сумму за прошедшие время по тарифам
Ответить с цитированием
  #5 (permalink)  
Старый 22.12.2014, 15:41
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Если совсем забить на производительность, то можно сделать что-то типо этого:
var startDate = new Date(2014,11,22,20,18);
var endDate = new Date(2014,11,23,3,18);

var prices = {
  '2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17': 10,
  '18,19,20,21,22,23,0,1': 17
};

var hoursPrices = {};
for(var key in prices) {
  var hours = key.split(',');
  hours.forEach(function(hour) {
    hoursPrices[hour] = prices[key];
  });
}

var minsCount = {},
    start = +startDate,
    end = +endDate;
for(var i = start; i < end; i += 60000) {
  var date = new Date(i);
  var hour = date.getHours();
  var price = hoursPrices[hour];
  if (!minsCount[price]) {
    minsCount[price] = 1;
  } else {
    minsCount[price] += 1;
  }
}

var sum = 0;
for(var price in minsCount) {
  sum += minsCount[price] * price;
}

alert(sum);
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разница между my_id и document.getElementById('my_id') js_explorer Events/DOM/Window 6 03.04.2013 17:53
Какая разница между модулями DOM Level 2 и интерфейсами Node? dump Общие вопросы Javascript 3 09.08.2012 17:22
Какая разница между post запросами jquery и ajax? Rooner jQuery 2 18.06.2012 14:29
Какая разница между определениями функций Nadine Общие вопросы Javascript 1 07.03.2012 16:07
Разница между (function(){})() и (function(){}()) ruzzx Общие вопросы Javascript 6 17.04.2011 22:51