2014-02-02 3 views
0

Можно ли указать время на обратный отсчет как часы? У меня есть «25 декабря 2014 00:01:00», но могу ли я что-то вроде этого «14:00», и он работает каждый день. Это код, который у меня есть.Определить время как часы

<!DOCTYPE html> 
    <html> 
    <head> 
    <script type="text/javascript"> 
    function cdtd() { 
     var xmas = new Date("December 25, 2014 00:01:00"); 
     var now = new Date(); 
     var timeDiff = xmas.getTime() - now.getTime(); 
     if (timeDiff <= 0) { 
      clearTimeout(timer); 
      document.write("Christmas is here!"); 

     } 
     var seconds = Math.floor(timeDiff/1000); 
     var minutes = Math.floor(seconds/60); 
     var hours = Math.floor(minutes/60); 
     var days = Math.floor(hours/24); 
     hours %= 24; 
     minutes %= 60; 
     seconds %= 60; 
     document.getElementById("daysBox").innerHTML = days; 
     document.getElementById("hoursBox").innerHTML = hours; 
     document.getElementById("minsBox").innerHTML = minutes; 
     document.getElementById("secsBox").innerHTML = seconds; 
     var timer = setTimeout('cdtd()',1000); 
    } 
    </script> 
    </head> 
    <body> 
    Days Remaining: 
    <div id="daysBox"></div> 
    Hours Remaining: 
    <div id="hoursBox"></div> 
    Minutes Remaining: 
    <div id="minsBox"></div> 
    Seconds Remaining: 
    <div id="secsBox"></div> 
    <script type="text/javascript">cdtd();</script> 
    </body> 
    </html> 

EDIT

Countdown работает отлично, но чтобы сделать его работу я должен определить время (мм: дд: гг: чч: мм: сс). Мой вопрос: могу ли я определить время, например (hh: mm: ss), потому что дата не имеет значения, единственное, что имеет значение 0h35: снова начните отсчет до примера 14:25:00 (чч: мм: сс).

+0

серьезно чувак, я не понял, что вы пытаетесь сказать! –

+0

Вы не очень хорошо объяснили свой вопрос. Вы говорите, что обратный отсчет работает прямо сейчас, но вы хотите, чтобы он отформатировался по-другому? – nathan

+0

Обратный отсчет работает отлично, но для его работы я должен определить время (мм: dd: yy: hh: mm: ss). Мой вопрос: могу ли я определить время, подобное этому (hh: mm: ss), потому что дата не имеет значения, важно только время (hh: mm: ss), и когда дело доходит до конца, обратный отсчет перезапускается и снова начинает отсчет к примеру 14:25:00 (чч: мм: сс). – user3238555

ответ

0

Некоторые работают результат в этой скрипкой: http://jsfiddle.net/dehisok/6Wu9a/1/

var now = new Date(); 
var xmas = new Date(now.getFullYear(),now.getMonth(),now.getDate(),23,1,0); 

Но есть ошибка: если время игла в прошлом - он выходит из строя :(Unfortunatelly, не имеют больше времени исправить.

Я изменил документ.напишите в jquery, потому что d.write не поддерживается jsfiddle.

Надеюсь, это то, что вам нужно.

Удачи вам!

+0

Спасибо, это сработало, но я не смог исправить эту ошибку :( – user3238555

+0

Исправлено: http://jsfiddle.net/dehisok/6Wu9a/6/ Просто нужно добавить возврат после предупреждения, если timeDiff меньше 0. –

+0

Thank для вашей помощи все работает сейчас! :) – user3238555

0

Не оставляйте строки даты синтаксиса в конструкторе даты. ES5 определяет поддерживаемый формат строки, но не все браузеры поддерживают его. До ES5 синтаксический анализ строк даты был полностью зависимым от реализации. В этом случае, вы точно знаете дату и время вы хотите установить, так что используйте числовые аргументы:

> var xmas = new Date(2014, 11, 25); 

, который создаст объект Date для 2014-12-25T00: 00: 00 в локальной временной зоне, основанной на настройки системы.

> if (timeDiff <= 0) { 
>  clearTimeout(timer); 

Там нет необходимости очистить любой тайм-аут, только не называйте SetTimeout снова.

>  document.write("Christmas is here!"); 

Если вызвано после события загрузки, это очистит весь документ. Вероятно, это не то, что вы хотите сделать для тех, кто следит за таймером до полуночи, а затем теряет всю страницу. :-)

> var timer = setTimeout('cdtd()',1000); 

Вызов SetTimeout каждое 1 второе означает, что таймер будет постепенно дрейфовать и случайн появляется пропустить второй. Он также не будет «тикать» последовательно по сравнению с системными часами. Вместо этого установите задержку на основе текущих миллисекунд, например.

> var timer = setTimeout('cdtd()', (1020 - now%1000)); 

поэтому он следующий пробегает около 20 мс после следующей полной секунды. И если время истекло, просто не звоните setTimeout.

Если вы просто ищете формат времени в часах, например, hh: mm: ss, тогда вам понадобится небольшая функция для однодисковых чисел padd, а затем соедините значения, например.

function pad(n){return (n<10? '0' ; '') + n;} 

затем:

document.getElementById("hoursBox").innerHTML = pad(hours) + ':' + pad(minutes) + ':' + 
               pad(seconds); 

Вы можете решить, как форматировать часть даты оттуда. Обратите внимание, что формат month: day: year очень запутан для подавляющего большинства пользователей сети. Гораздо лучше использовать формат ISO 8601, как year-month-day hh:mm:ss

Смежные вопросы