попробую заодно функции html run ( теги форума)
вот
вводите сюда дату . Формат - <b>Y-m-d</b> <br>
<input type = "date" value="2011-03-30" onclick="do_it(this)">
<br>
событие <b>пока ничего.</b>
<script>
// кэш
reg = /\d{4}-\d{2}-\d{2}/;
k = 1/(1000*60*60) ;
function do_it(el){
/*проверка на соответствие шаблону*/
if ( !reg.test(el.value) ) {alert('err');return}
var now = new Date(); // текущее время
var fut = Date.parse( el.value ); // введенное время
var delta = fut - now; // разница во времени ( в миллисекундах)
var back = delta < 0; // TRUE, если время уже прошло. FALSE, если оно еще не наступило
// т.к. в delta может быть и отрицательное число, то берем модуль, делим на 1000 и на 3600 ( после 1000 получаются секунды,после 3600 - часы) и потом округляем до двух знаков после запятой
var d = (Math.abs(delta)*k).toFixed(2);
// тут формирование строки. в d у нас количество часов
var str = '';
if( back) str = " было " + d + " часов назад";
else str = " будет через " + d + " часов.";
// это я щак нашел элемент,куда записывать строку (увы,лучше придумать не мог :D )
el.parentNode.children[4].innerHTML = str;
}
</script>
код хорошо комментирован. думаю, проблем возникнуть не должно
часы даются не в привычном представлении ( 20:30 ), а в десятичном ( вместо 20:30 будет 20.5 )
и еще, во времени,которое выбирается, часы,минуты,секунды установлены на 00:00:00