Привет, господа программисты!
Нуждаюсь в Вашей помощи, задался задачей, мне кажется довольно интересной и застрял.
Идея такая: при открытие страницы(или при клике на кнопку, не суть, сам разберусь потом, главное механизм) у пользователя в локальную память сохраняется текущие время и он может даже уйти со страницы(или остаться наблюдать за пересчетом в реально времени, опять же потом сам повешу на таймаут, чтобы выводился пересчет в реальном времени), зайдя через некоторое время он должен получить сумму из расчета пройденного времени и тарифов.
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); // считаем сколько прошло времени с начального момента
Вот так, а дальше затык, вообще не знаю куда двигаться, помогите, как реализовать и реально ли подобное вообще сделать?