HTML код:

<html>
<head>
<title>Демонстрация посложнее</title>
<script>
var final = {'year':2008, 'month':12, 'day':31, 'hour':23, 'min':59, 'sec':59}; // это дата и время, до которых надо считать
var months = [31,28,31,30,31,30,31,31,30,31,30,31]; // количество дней в месяцах. В феврале поставил 28. Пусть будет:)
var d = new Date();
var year = final.year - d.getFullYear(); // вычисляем, сколько надо лет отсчитывать
var month = final.month - d.getMonth() - 1;
if (year && final.month < d.getMonth()) month += 12; // если количество оставшихся лет больше нуля, увеличиваем месяцы на 12. Ну по логике так надо сделать
var days = final.day - d.getDate() - 1;
if (month && final.day < d.getDate())
{
days += months[month-1]; // если месяцев больше 0, то количество дней увеличивается на количество дней в предыдущем месяце
month--;
}
var hour = final.hour - d.getHours();
var min = final.min - d.getMinutes();
var sec = final.sec - d.getSeconds();
var timer; // ссылка на таймер, который потом можно будет остановить
// это необязательно, просто мне нравится начинать все свои скрипты с main() :)
// вызов её прописывается в <body onload="main()">
function main() {
timer = window.setInterval("showTime()", 1000); // каждые 1000 мс вызываем функцию showTime()
}
function showTime() {
sec--; // каждый вызов функции приводит к уменьшению на 1 секунду
if (sec < 0) // если секунды ушли в минус,
{
sec = 59; // возвращаем их в 59
min--; // и уменьшаем минуту
if (min < 0) // если минуты ушли в минус
{
min = 59; // возвращаем их в 59
hour--; // и уменьшаем час на единицу
if (hour < 0) // а уж если и час в минус ушёл
{
hour = 23;
day--;
if (day < 0)
{
day = months[month-1];
month--;
if (month < 0)
{
month = 12;
year--;
if (year < 0)
{
window.clearInterval(timer); // значит хватит считать, снимаем таймер, чтоб функция больше не вызывалась
document.getElementById("showTime").innerHTML = "<span style='color:red'>Армагеддон наступил!</span>"; // и выводим красными буквами приветствие:)
}
}
}
}
}
}
// окончание вычисления такое:
text = "До армагеддона осталось ";
switch(year) {
case 0:
text += "0 лет "; break;
case 1:
text += "1 год "; break;
case 2: case 3: case 4:
text += year + " года "; break;
default:
text += year + " лет "; break;
}
switch(month) {
case 0: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12:
text += month + " месяцев "; break;
case 1:
text += month + " месяц "; break;
case 2: case 3: case 4:
text += month + " месяца "; break;
}
switch(days) {
case 1: case 21: case 31:
text += days + " день "; break;
case 2: case 3: case 4: case 22: case 23: case 24:
text += days + " дня "; break;
default:
text += days + " дней "; break;
}
text += " и вот столько ещё времени: " + hour + ":";
if (min.toString().length == 1) text += "0";
text += min + ":";
if (sec.toString().length == 1) text += "0";
text += sec;
document.getElementById("showTime").innerHTML = text;
}
</script>
<body onload="main(); showTime();">
<div id="showTime">Сюда будет вписываться текст</div>
</body>
</html>
Я не гарантирую полную правильность работы - может быть дни или месяцы или ещё чего будет считать неправильно, но... Уже за полночь, а мне спать осталось меньше 8 часов-ня

На первый взгляд всё работает. Скрипт-то, в общем, не сложный.