Показать сообщение отдельно
  #1 (permalink)  
Старый 30.10.2013, 12:54
Интересующийся
Отправить личное сообщение для Spamol Посмотреть профиль Найти все сообщения от Spamol
 
Регистрация: 19.03.2010
Сообщений: 27

Пересчитать сумму за прошедшие время по тарифам
Привет, господа программисты!
Нуждаюсь в Вашей помощи, задался задачей, мне кажется довольно интересной и застрял.
Идея такая: при открытие страницы(или при клике на кнопку, не суть, сам разберусь потом, главное механизм) у пользователя в локальную память сохраняется текущие время и он может даже уйти со страницы(или остаться наблюдать за пересчетом в реально времени, опять же потом сам повешу на таймаут, чтобы выводился пересчет в реальном времени), зайдя через некоторое время он должен получить сумму из расчета пройденного времени и тарифов.
15.00 - 18.00: час стоит 150p
18.00 - 21.00: час стоит 210p
21.00 - 00.00: час стоит 300p
00.00 - 03.00: час стоит 360p

Пример.
Человек зашел, записалось время 11:03:54, он вышел и зашел в 20:45:12, ему должно все пересчитаться исходя из тарифов
С 11:03:54 по 14:59:59(ставка 0) - ((пройденное время в минутах) * 0 = 0 рублей за текущий период
с 15:00:00 по 17:59:59(ставка 2,5 руб/мин) - ((пройденное время в минутах) * 2,5 = 450 рублей
с 18:00:00 по 20:45:12(ставка 3,5 руб/мин) - ((пройденное время в минутах) * 3 = 577,5 рублей
Далее все полученные данные складываются(0+450+577,5) и показываются пользователю
1027,5 рублей за период с 11:03:54 по 20:45:12

Ломаю голову уже какой день, как реализовать такой пересчет динамически, чтобы работало с любым кол-вом диапазоном, чтобы даже зайдя через сутки правильно считало, а также и в пределах одного часа, чтобы можно было добавлять и убирать элементы из объекта(потом будет динамически), пока скрипт в таком зачаточном состоянии, не знаю куда двигаться дальше и правильную ли я выбрал структуру хранения первичных данных(объект с тарифами, дата в переменной и т.д.)

var now,hours,min,sec,realTime;
function checkTime(i){
  if (i<10){
	  i="0" + i;
  }
  return i;	
}
now = new Date();
hours = checkTime(now.getHours());
min = checkTime(now.getMinutes());
sec = checkTime(now.getSeconds());
realTime = hours + ":" + min + ":" + sec;
if (!localStorage['time']) {
  localStorage['originTime'] = now.getTime(); // записываем начальное время посещения в миллисекундах для расчета
  localStorage['time'] = hours + ":" + min + ":" + sec; // записываем начальное время посещения в человеческом виде для вывода и сравнения
}

var tarifSetka = { // объект с данными
  time1: {
    run: '15:00:00',
    end: '17:59:59',
    tarif: 150
  },
  time2: {
    run: '18:00:00',
    end: '20:59:59',
    tarif: 210
  },
  time3: {
    run: '21:00:00',
    end: '23:59:59',
    tarif: 300
  },
  time4: {
    run: '00:00:00',
    end: '02:59:59',
    tarif: 360
  },
  time5: {
    run: '03:00:00',
    end: '14:59:59',
    tarif: 0
  }
};

//console.log(tarifSetka);
//console.log(localStorage['time']);
//console.log(realTime);
for (var o=1;o <= (Object.keys(tarifSetka).length);o++) {
  if (localStorage['time'] >= (tarifSetka['time'+o].run) && localStorage['time'] <= (tarifSetka['time'+o].end)) {
   var tarifRun = tarifSetka['time'+o].tarif; //узнаем в цикле какой тариф соответствует текущему времени
  }
}
var gameTime = parseInt(((now.getTime() - localStorage['originTime'])/1000)/60); // считаем сколько прошло времени с начального момента

Вот так, а дальше затык, вообще не знаю куда двигаться, помогите, как реализовать и реально ли подобное вообще сделать?

Последний раз редактировалось Spamol, 30.10.2013 в 12:57.
Ответить с цитированием