Страница 1 из 1

Нужна помощь!

Добавлено: 08 окт 2006, 16:41
artemonix
У кого есть простенький временной калькулятор следующего вида:

1:00
+2:10

=190 (результат в минутах).

Действия- сложение и вычитание.
Пожалуйста, вышлите на адресс artless@list.ru
очень нужно для работы

Добавлено: 08 окт 2006, 21:54
Oscar
calc.html

Код: Выделить всё

<script>
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };
function calculate() {
	var input = document.getElementById("input").value;
	var operation_plus;
	if (input.match("\\+") != null) {
		operation_plus = true;
	} else if (input.match("-") != null) {
		operation_plus = false;
	} else {
		alert("Input contains no \"+\" or \"-\" symbol");
		return;
	}

	if (operation_plus) {
		input = input.split("+");
	} else {
		input = input.split("-");
	}
	if (input.length < 1 || input.length > 2) {
		alert("Wrong number of parameters");
		return;
	}
	var first = input[0].trim();
	var second = input[1].trim();
	first = first.split(":");
	if (first.length < 1 || first.length > 2) {
		alert("Wrong number of parameters in first time");
		return;
	}
	second = second.split(":");
	if (second.length < 1 || second.length > 2) {
		alert("Wrong number of parameters in second time");
		return;
	}
	var first = parseInt(first[0].trim())*60 + parseInt(first[1].trim());
	var second = parseInt(second[0].trim())*60 + parseInt(second[1].trim());

	var result = 0;
	if (operation_plus) {
		result = first + second;
	} else {
		result = first - second;
	}

	document.getElementById("output").value = result;
}
</script>
<input type="text" id="input">
<input type="button" value="calculate" onClick="calculate();">
<input type="text" id="output" readonly="readonly">

Добавлено: 09 окт 2006, 18:02
artemonix
Большое спасибо.
Но есть еще один важный пункт - переход на новые сутки.
Например, если начальное время 23:10, а кончное 1:20, то разница будет 70 минут. По Вашему алгоритму этого не получается, не могли бы Вы это исправить.
(сразу хочу сказать, что интервал от одной временной точки до другой более чем 24 часа мне учитывать не надо)
Еще раз большое спасибо за помощь и за внимание.

Добавлено: 09 окт 2006, 18:28
Oscar

Код: Выделить всё

<script>
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };
function calculate() {
	var input = document.getElementById("input").value;
	var operation_plus;
	if (input.match("\\+") != null) {
		operation_plus = true;
	} else if (input.match("-") != null) {
		operation_plus = false;
	} else {
		alert("Input contains no \"+\" or \"-\" symbol");
		return;
	}

	if (operation_plus) {
		input = input.split("+");
	} else {
		input = input.split("-");
	}
	if (input.length < 1 || input.length > 2) {
		alert("Wrong number of parameters");
		return;
	}
	var first = input[0].trim();
	var second = input[1].trim();
	first = first.split(":");
	if (first.length < 1 || first.length > 2) {
		alert("Wrong number of parameters in first time");
		return;
	}
	second = second.split(":");
	if (second.length < 1 || second.length > 2) {
		alert("Wrong number of parameters in second time");
		return;
	}

	var first_hours = parseInt(first[0].trim());
	var second_hours = parseInt(second[0].trim());
	if (!operation_plus && first_hours < second_hours) {
		first_hours+=24;
	}

	var first = first_hours*60 + parseInt(first[1].trim());
	var second = second_hours*60 + parseInt(second[1].trim());

	var result = 0;
	if (operation_plus) {
		result = first + second;
	} else {
		result = first - second;
	}

	document.getElementById("output").value = result;
}
</script>
<input type="text" id="input">
<input type="button" value="calculate" onClick="calculate();">
<input type="text" id="output" readonly="readonly">

Добавлено: 09 окт 2006, 19:17
artemonix
Вот это да, не успел написать уже помогли :lol:
Последняя просба уважаемый Оскар.
Нужно чтобы часы и минуты автоматически разделялись двоеточием, т.е. набираем только двузначные числа, а двоеточия разделяют их сами. И чтобы подсчет производился нажатием клавиши ентер.
Т.е. ,например, такой шаблон

**:** - **:**(нажимаем ентер)****(результат в минутах)

И еще одно, действие необходимо только одно - вычитание, его можно задать по умолчанию.
Дело в том, что я работаю на железной дороге маневровым диспетчером, а этот калькулятор очень бы помог в муторных составлениях хронометражных таблиц.
Спасибо за содействие

Добавлено: 09 окт 2006, 21:27
Oscar
calc.html

Код: Выделить всё

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Калькулятор для составления хронометражных таблиц</title>
<script type="text/javascript">

function getNum(id) {
	var f = document.getElementById(id);
	if (f == null || isNaN(f.value)) return 0;
	return parseInt(f.value);
}

function clear(id) {
	var f = document.getElementById(id);
	if (f != null)
		f.value = "";
}

function x(x) {
	return (x < 10)?("0"+x):x;
}

function calculate() {

	var first_hours = getNum("first_hours");
	var first_minutes = getNum("first_minutes");
	var second_hours = getNum("second_hours");
	var second_minutes = getNum("second_minutes");

	var temp = first_hours;

	if (first_hours < second_hours) {
		temp += 24;
	}

	var first = temp*60 + first_minutes;
	var second = second_hours*60 + second_minutes;

	var result = first - second;

	addResult(x(first_hours) + ":" + x(first_minutes) + " - " + x(second_hours) + ":" + x(second_minutes), result);

	clear("first_hours");
	clear("first_minutes");
	clear("second_hours");
	clear("second_minutes");

	var f = document.getElementById("first_hours");
	if (f != null) f.focus();
}

function addResult(r1, r2) {
	var tr = document.createElement("TR");

	var td = document.createElement("TD");
	td.innerHTML = r1;
	tr.appendChild(td);
	td = document.createElement("TD");
	td.innerHTML = " = ";
	tr.appendChild(td);
	var td = document.createElement("TD");
	td.innerHTML = r2;
	tr.appendChild(td);

	var result = document.getElementById("result");
	if (result != null) {
		if (result.firstChild == null) {
			result.appendChild(tr);
		} else {
			result.insertBefore(tr, result.firstChild);
		}
	}
}

function test(elem, nextID) {

	if (elem.value.length == 1) {
		var a = elem.value.charAt(0);
		if (isNaN(a))
			elem.value = "";
	} else if (elem.value.length >= 2) {
		var a = elem.value.charAt(0);
		var b = elem.value.charAt(1);
		elem.value = "";
		if (!isNaN(a))
			elem.value += a;
		if (!isNaN(b))
			elem.value += b;
	}

	if (elem.value.length == 2) {
		if (nextID == "") {
			calculate();
		} else {
			var f = document.getElementById(nextID);
			if (f != null) f.focus();
		}
	}
}

function init() {
	var f = document.getElementById("first_hours");
	if (f != null) f.focus();
}

</script>
<style type="text/css">
.calc {
	border-collapse: collapse;
}
.calc tr {
	border: 1px solid #000000;
}
</style>
</head>
<body onload="init();">
Формат ЧЧ:ММ-ЧЧ:ММ

<table class="calc">
<thead>
<tr style="border-width: 0px;"><td colspan="3">
	<input type="text" id="first_hours" onkeyup="test(this, 'first_minutes');" size="2" autocomplete="off"> :
	<input type="text" id="first_minutes" onkeyup="test(this, 'second_hours');" size="2" autocomplete="off"> - 
	<input type="text" id="second_hours" onkeyup="test(this, 'second_minutes');" size = "2" autocomplete="off"> :
	<input type="text" id="second_minutes" onkeyup="test(this, '');" size = "2" autocomplete="off">
</td></tr>
<tr style="border-width: 0px;"><td colspan="3"></td></tr>
</thead>
<tbody id="result">
</tbody>
</table>
</body>
</html>