Показать сообщение отдельно
  #6 (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);
Ответить с цитированием