БлогNot. Считаем время закачки :)

Считаем время закачки :)

Мини-скрипт позволяет по известному объёму закачки, заданному в Кб, Мб, Гб или Тб, и заданной скорости закачки (Кбайт/сек., Мбайт/сек., Кбит/сек. или Мбит/сек.) в "человеческих" единицах оценить время, нужное, чтоб всё закачать :) В общем-то, современные менеджеры закачек показывают эту величину нормально, но иногда хочется прикинуть заранее, не калькулятор же мучить? Тем более, есть разные единицы измерения объёмов и скорости, которые я учёл в этом быстро написанном калькуляторе:

Извините, для работы приложения нужен включённый Javascript
Объём закачки:
Скорость закачки:
 

Время закачки более года не считает - неактуально :)

Функция time_str (s0) занимается как раз тем, что переводит время s0, заданное в секундах, в более крупные единицы времени. Конечно, начиная с часа уже приблизительно. Остальные функции встречались в других скриптах.

Вот полный код файла скрипта:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
 <title>Калькулятор для вычисления времени закачки</title>
</head>
<body>

<script type="text/javascript">
 function trim(string) { return string.replace (/\s+/g, " ").replace(/(^\s*)|(\s*)$/g, ""); }
 function goodwordform(k,w,o1,o2,o5) {
  if ( (k%100>10 && k%100<20) || k%10>4 || k%10==0) w+=o5;
  else if (k%10==1) w+=o1;
  else w+=o2;
  return w;
 }
 function time_str (s0) {
  var s=Math.round(s0);
  if (s<1) return 'Менее 1 сек.';
  else if (s<60) return '~ '+s+' сек.';
  var minutes=Math.floor(s/60);
  s-=minutes*60;
  if (minutes<60) return '~ '+minutes+' мин.'+(s>0?' '+s+' сек.':'');
  var hours=Math.floor(minutes/60);
  minutes-=hours*60;
  if (hours<24) return '~ '+hours+' час.'+(minutes>0?' '+minutes+' мин.':'');
  var days=Math.floor(hours/24);
  hours-=days*24;
  if (days<31) 
   return '~ '+days+' '+goodwordform(days,'д','ень','ня','ней')+' '+(hours>0?' '+hours+' час.':'');
  var monthes=Math.floor(days/30);
  days-=monthes*30;
  if (monthes<12) 
   return '~ '+monthes+' '+goodwordform(monthes,'месяц','','а','ев')+' '+
    (days>0?' '+days+' '+goodwordform(days,'д','ень','ня','ней'):'');
  else return 'Более года';
 }
 function calc () {
  var o=parseFloat (trim(document.f_result.o.value));
  if (isNaN(o) || o<=0) return 'Введите в поле "Объём" положительное число';
  else document.f_result.o.value=o;
  var v=parseFloat (trim(document.f_result.v.value));
  if (isNaN(v) || v<=0) return 'Введите в поле "Скорость" положительное число';
  else document.f_result.v.value=v;
  var ob = document.f_result.ob.value;
  var vb = document.f_result.vb.value;
  var s=(o*ob)/(v*vb);
  return time_str(s);
 }
</script>
<noscript>
 <div align="center">Извините, для работы приложения нужен включённый Javascript</div>
</noscript>

<form name="f_result" method="get">
 <table align="center" border="0" cellpadding="2" cellspacing="0">
  <tr>
   <td>Объём закачки:</td> 
   <td><input type="text" size="12" maxlength="10" name="o" value=""></td> 
   <td>
    <select name="ob" size="1"> <!-- в байтах -->
     <option value="1024">Килобайт
     <option value="1048576" selected>Мегабайт
     <option value="1073741824">Гигабайт
     <option value="1099511627776">Терабайт
    </select>
   </td> 
  </tr>
  <tr>
   <td>Скорость закачки:</td> 
   <td><input type="text" size="12" maxlength="10" name="v" value=""></td> 
   <td>
    <select name="vb" size="1"> <!-- в байтах/сек -->
     <option value="1024" selected>Кбайт/сек
     <option value="1048576">Мбайт/сек
     <option value="128">Кбит/сек
     <option value="131072">Мбит/сек
    </select>
   </td> 
  </tr>
  <tr>
   <td colspan="3"><span id="t_result">&nbsp;</span></td> 
  </tr>
  <tr>
   <td colspan="3"><input type="button" value="Вычислить время" 
    onclick="document.getElementById('t_result').innerHTML=calc()"></td> 
  </tr>
 </table>
</form>

</body></html>

08.10.2014, 13:44 [9884 просмотра]


теги: javascript числа время сервис

К этой статье пока нет комментариев, Ваш будет первым