2014-01-27 2 views
3

Я относительно новый для JavaScript, и пытаюсь выяснить способ создать часы (который занимает немного объясняющее, пожалуйста, медведь со мной):Javascript часы преобразование в реальное время только секунды

I Я пытаюсь создать часы javascript, где часы следуют в реальном времени, а затем вычисляет, сколько секунд прошло с полуночи (в этот момент часы сбрасываются). Затем я хочу, чтобы определить, что одна секунда в миллисекундах, т. Е. Изменить, как долго длится одна секунда.

Мой план состоит в том, чтобы он работал на часы, составляющие 200 000 секунд, ровно через 24 часа (если каждая «секунда» длится 0,432 секунды, это произойдет).

Любые советы? Вся помощь будет принята с благодарностью.

PS. для тех, кого это интересует, я делаю статью о теории времени, где утверждаю, что часы должны следовать за метрической системой и что день должен иметь 20 часов, каждый час должен длиться 100 минут, а каждая минута должна длиться 100 секунд. Делая это, часы - всего лишь своего рода таймер, который насчитывает 200 000 с полуночи до полуночи.

PPS. если что-то неясное, я попытаюсь объяснить это более подробно.

+1

Посмотрите на объект [Дата] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) и [setInterval] (https: //developer.mozilla .org/en-US/docs/Web/API/Window.setInterval). – A1rPun

+4

Хорошо. Так в чем ваш вопрос? Вам понадобится использовать объект [Date] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date), чтобы получить текущее время, получить час, минуту и секунд от него, конвертировать в секунды, а затем конвертировать в ваш формат. Используйте [setInterval] (https://developer.mozilla.org/en-US/docs/Web/API/Window.setInterval), чтобы обновлять код так часто, как вы хотите. Примечание: не ожидайте, что 'setInterval' будет точным. То есть, если вы попросите его обновить каждые 1000 миллисекунд, он будет дрейфовать, поэтому всегда получайте реальное время с 'Date.now()' –

+1

@MattBurland Hive mind – A1rPun

ответ

2

Вы хотите функцию setInterval, которую вы можете указать, чтобы стрелять каждые 432 миллисекунды.

secondTimer = window.setInterval(function() { 
    // do stuff in here 
},432); 

Как уже упоминалось, это не самый точный таймер, так что вы хотите использовать объект Date для синхронизации фактического времени.

2

Даты в Javascript - это фактически число, которое подсчитывает количество милисекунд с указанной фиксированной даты. Поэтому, если у вас есть дата в Javascript, вы можете использовать ее метод getTime, чтобы увидеть это число. Документация по ссылке немного глубже, чем мое короткое описание здесь.

Так что, если вы хотите, чтобы увидеть, сколько секунд elaped между сегодня, 0 часов и сегодня, прямо сейчас, вы можете использовать следующий код:

var now = new Date(); // a new Date initialized without parameter defaults to current time 

// Initializing with just year, month and day will set the time of the day to 00:00:00 
var today = new Date(now.getFullYear(), now.getMonth(), now.getDate()); 

var milisseconds = now.getTime() - today.getTime(); 

Теперь все, что вам нужно сделать, это разделить milisseconds переменная на 1000, и у вас будет количество «имперских» секунд. С этого момента вы можете конвертировать в свои «метрические» секунды, как хотите.

Это будет делать для конвертации ... Теперь, чтобы получить Javascript, чтобы сделать что-то через заданные интервалы времени, вы можете использовать глобальную функцию setInterval, как в ответ Мордреда. Я цитирую, но престижность и +1 к нему:

timer = setInterval(function() { 
    // do stuff in here 
}, 432); // 432 is an arbitrary value, this will fire once every 432 milisseconds. 

Как проверить документацию for that и for SetTimeout.

И как сказал Мэтт в комментариях к этому вопросу, события, связанные с синхронизацией в Javascript, могут не всегда точно срабатывать с установленными вами временными интервалами - есть другие вещи, вы можете провести некоторое исследование по этому вопросу - так что проверьте текущее время, когда событие было запущено путем инициализации нового объекта Date.Обратите внимание на то, что:

var x = Date.now(); 

является обобщающим для:

var d = new Date(); 
var x = d.getTime(); 

Работа с датами в JavaScript, может быть немного неудобно для начинающих ... не заметил, что некоторые имена методов и свойств объекта Date может вводить в заблуждение. Месяцы основаны на 0, и getDay вернет день недели, а не месяца, поэтому обязательно прочитайте там документацию. Кроме этого, удачи и счастливого кодирования!

+1

Он заявил, что его метрические «секунды» не являются фактическими секундами, но являются .432 реальной секунды, поэтому я указал 432 как интервал времени. – Mordred

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