Веб-компас сайтостроителей
/ Все статьи / JavaScript / Примеры на JavaScript / Часы и дата на JavaScript

Часы и дата на JavaScript

В этой статье рассмотрим, как вывести дату и сделать часы на сайте с помощью JavaScript.

Часы и дата на JavaScript


Для получения текущего времени воспользуемся объектом Date(), который без аргументов и возвращает нужное нам текущее время.
Код
time=new Date();

Но формат даты, определяемый этим объектом, нас не устраивает, для примера посмотрите
Код
alert (Date());

Для получения нужного нам формата нужно определить каждый компонент даты, то есть нужно вычислить день месяца, номер месяца и т.д. Для этого воспользуемся следующими функциями
  • getSeconds() - возвращает число секунд в диапазоне от 0 до 59;
  • getMinutes() - возвращает число минут в диапазоне от 0 до 59;
  • getHours() - возвращает число часов в диапазоне от 0 до 23;
  • getDay() - возвращает день недели в диапазоне от 0 до 6 (0->воскресенье, 1 -> понедельник, и т.д.);
  • getDate() - возвращает день месяца в диапазоне от 1 до 31;
  • getMonth() - возвращает номер месяца в диапазоне от 0 до 11;
  • getFullYear() - возвращает год в виде четырех чисел, минимальное значение 1970.

То есть часы, минуты и секунды получим следующим образом
Код
time=new Date();

   time_sec=time.getSeconds();// получаем секунды
   time_min=time.getMinutes();// получаем минуты
   time_hours=time.getHours();// получаем часы

Вроде уже можно писать функцию для вывода часов, но есть один нюанс, если возвращаемое значение функциями getSeconds(), getMinutes() и getHours() будет меньше 10, то цифры 0 не будет впереди. Поэтому давайте напишем функцию представляющую вид часов в привычном для нас виде
Код
function wr_hours()
  {
   time=new Date();

   time_sec=time.getSeconds();
   time_min=time.getMinutes();
   time_hours=time.getHours();
   time_wr=((time_hours<10)?"0":"")+time_hours;
   time_wr+=":";
   time_wr+=((time_min<10)?"0":"")+time_min;
   time_wr+=":";
   time_wr+=((time_sec<10)?"0":"")+time_sec;
}

В переменной time_wr будет время в привычном для нас виде. Теперь нужно нам это время вывести на экран монитора. Воспользоваться функцией document.write() не получиться в данном случае, так как нам же надо "тикающие" часы, то есть нужно время обновлять через определенный промежуток времени. Воспользуемся свойством innerHTML, которое есть у каждого элемента HTML-кода. Это свойство содержит весь HTML-код данного элемента. Его можно изменять. И если его изменить, то изменится HTML-код, содержащийся в элементе, а, следовательно, и содержимое веб-странички. Поэтому поступим следующим образом. Будем выводить время в элементе span, которому дадим уникальный идентификатор hours. Впоследствии в JavaScript-е получим к нему доступ выражением document.getElementById("hours")
Код
...
<span id="hours"></span>
<script type="text/javascript">
obj_hours=document.getElementById("hours");
function wr_hours()
  {
   time=new Date();

   time_sec=time.getSeconds();
   time_min=time.getMinutes();
   time_hours=time.getHours();
   time_wr=((time_hours<10)?"0":"")+time_hours;
   time_wr+=":";
   time_wr+=((time_min<10)?"0":"")+time_min;
   time_wr+=":";
   time_wr+=((time_sec<10)?"0":"")+time_sec;   
   obj_hours.innerHTML=time_wr;   
  }
wr_hours();
</script>
...

В данном случае время не будет меняться, но чтобы время обновлялось, нужно функцию wr_hours() вызывать через определенное время. В этом нам поможет функция setInterval(), которая выполняет заданный код каждый раз по истечению заданного промежутка времени. Время в этой функции задается в миллисекундах.
Код
setInterval("{выражение}", {временной интервал});

Мы зададим интервал равный одной секунде (1000 миллисекунд). Чаще обновлять нет смысла, так как у нас время выводится с точностью до секунды. Соответственно получим следующий код
Код
...
<span id="hours"></span>
<script type="text/javascript">
obj_hours=document.getElementById("hours");
function wr_hours()
  {
   time=new Date();

   time_sec=time.getSeconds();
   time_min=time.getMinutes();
   time_hours=time.getHours();
   time_wr=((time_hours<10)?"0":"")+time_hours;
   time_wr+=":";
   time_wr+=((time_min<10)?"0":"")+time_min;
   time_wr+=":";
   time_wr+=((time_sec<10)?"0":"")+time_sec;   
   obj_hours.innerHTML=time_wr;   
  }
wr_hours();
setInterval("wr_hours();",1000);
</script>
...

Теперь давайте добавим дату и день недели. Так как функции getDay() и getMonth() возвращают лишь числа, а мы хотим видеть названия дня недели и месяца, то добавим два массива с перечислением дней недели и названиями месяцев.
Код
name_month=new Array ("января","февраля","марта", "апреля","мая", "июня","июля","августа", "сентября","октября", "ноября","декабря");
name_day=new Array ("воскресенье","понедельник","вторник", "среда","четверг", "пятница","суббота");

В итоге получим следующий код
Код
<html>

<head>
  <title>Часы и дата на JavaScript</title>
</head>
<body>
<h1>Часы и дата на JavaScript</h1>
<div><span id="hours"></span>
</div>

<script type="text/javascript">

obj_hours=document.getElementById("hours");

name_month=new Array ("января","февраля","марта", "апреля","мая", "июня","июля","августа","сентября", "октября","ноября","декабря");
name_day=new Array ("воскресенье","понедельник", "вторник","среда","четверг", "пятница","суббота");

function wr_hours()
  {
   time=new Date();

   time_sec=time.getSeconds();
   time_min=time.getMinutes();
   time_hours=time.getHours();
   time_wr=((time_hours<10)?"0":"")+time_hours;
   time_wr+=":";
   time_wr+=((time_min<10)?"0":"")+time_min;
   time_wr+=":";
   time_wr+=((time_sec<10)?"0":"")+time_sec;
   
   time_wr=" сегодня "+name_day[time.getDay()]+", "+time.getDate()+" "+name_month[time.getMonth()]+" "+time.getFullYear()+" г. время "+time_wr;
   
   obj_hours.innerHTML=time_wr;   
  }

wr_hours();
setInterval("wr_hours();",1000);
  
</script>

</body>
</html>

И теперь на сайте будет дата и "тикающие" часы.
Комментарии к публикации
Всего комментариев: 31
пользователь: Димон | 28.01.2009, 22:54 #
Очень интересная статья. Обязательно поставлю себе часы на сайт.
прохожий: Гость | 05.02.2009, 00:07 #
Да этот легкий скрипт я и сам могу написать!
А вот не знаете ли вы, как написать скрипт, чтобы время менялось не только, когда я стр. обновляю, а каждую секунда...как бы в реальном времени?
прохожий: Skaica | 18.11.2009, 21:03 #
БОЛЬШОЕ СПАСИБО ! Поменяла руские названия на латышские и все.
прохожий: Гость | 22.11.2009, 01:13 #
А можно поменять цвет с черного на синий а?
прохожий: NatP | 22.02.2010, 12:59 #
Спасибо за скрипт даты!

Вопрос! На другую тему!
Как можно поставить калькулятор на сайт, чтобы завести расчеты по формулам как таблицы в exel?

Заранее спасибо.
прохожий: Удовлетворенный пользователь | 27.03.2010, 05:42 #
Спасибо большое)))) очень помогло!!!!
прохожий: Гость | 20.04.2010, 16:41 #
куда вставлять этот код? скажите плз
Автор статьи: admin | 21.04.2010, 05:03 #
Как куда? На страницу сайта - в html-код!
прохожий: Гость | 30.06.2010, 08:10 #
Огромное спасибо, надо будет применить где нибудь.
прохожий: Владислав | 29.07.2010, 04:22 #
Я изменил код - теперь тут только "тикающие" часы.Кое-что я исконно изменил:

<script type="text/javascript">
//This script is taken on http://westsidecrew.3dn.ru/ .You can use script only with this comment.
function clock()
{
date = new Date();
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
if (hours < 10) {hours = "0" + hours }
if (minutes < 10) {minutes = "0" + minutes }
if (seconds < 10) {seconds = "0" + seconds }
time = (hours + ":" + minutes + ":" + seconds);
hours=document.getElementById("hours");
hours.innerHTML=time;
}
setInterval("clock();",1000);
clock()
</script>
<div><span id="hours"></span></div>

прохожий: Яна | 05.03.2011, 21:42 #
Спасибо за код! Я только начинаю изучать верстку, и без проблем вставила этот код куда мне было нужно - все работает! Респект и уважуха вам! Спасли!
прохожий: Гость | 22.09.2010, 23:42 #
Огромное спасибо
прохожий: Сергей | 06.10.2010, 12:11 #
А как бы сделать так, чтобы в зависимости от текущего времени выводилась определенная фраза.
Допустим в промежуток времени с 12-00 до 14-00 выводилась "Надпись 1"
а в промежуток времени с 14-00 до 14-20 выводилась "Надпись 2"
и так далее...
Автор статьи: admin | 13.10.2010, 18:10 #
Ну так сравнивайте время с определенным диапазоном и выводите соответствущий текст.
прохожий: Гость | 09.12.2010, 03:15 #
Большое спасибо! Просто, лаконично и РАБОТАЕТ!
прохожий: Башмак | 10.02.2011, 01:00 #
А как сделать так, чтобы часы работали по определенно заданному часовому поясу(т.е. GMT), а не по тому которое установлено у пользователя на компьютере? Например мне нужно чтобы на моём сайте эти часы работали по московскому времени, это [GMT +3:00]. Возможно ли такое реализовать?
Автор статьи: admin | 10.02.2011, 05:38 #
Наверное можно. Нужно будет передать с помощью PHP время timestamp в javascript.
прохожий: alphos | 26.04.2011, 04:38 #
круто, автору спасибо давно искал активные часики
сайту +1
пользователь: SolarisR | 14.11.2011, 07:53 #
Здравствуйте. Я в плане написания скриптов новичок, поэтому сразу задам глупый вопрос:
как создать часы для сайта, в сутках которых будет не 24 часа, а 72? При этом изменения по часовым поясам не предвидится...
все часы либо ориентированы на 24 часа, либо сразу подстраиваются под компьютер пользователя.
Пробовала написать на флеше - 72 часа не держит...покадровая разработка не устраивает.
возможен вариант с "растягиванием" суток на 72 часа (т.е. пишется 24, а тянется все 72).
очень нужна помощь в этом вопросе(
Автор статьи: admin | 15.11.2011, 02:51 #
Это как 72 часа в сутках? :)
прохожий: Юджин | 18.11.2011, 09:55 #
Вот захотел поменять местами дату и время, но, увы... чего-то не склеивается, может подскажете?
На такие вопросы трудно найти ответ в Google.
Проясните пожалуйста сам вот ентот синтаксис, если не затруднит, думаю енто не мне одному будет интересно.
прохожий: Chapser | 19.01.2012, 03:39 #
Есть вариант получше, похож на время на главной странице Яндекса

<script type="text/javascript">
var tchk=true;
function getCurrentTime() {
var name_month=new Array ("января","февраля","марта", "апреля","мая", "июня","июля","августа","сентября", "октября","ноября","декабря");
var name_day=new Array ("воскресенье","понедельник", "вторник","среда","четверг", "пятница","суббота");
var time=new Date();
var time_hours=time.getHours(time);
var time_minutes=time.getMinutes(time);

if (time_minutes<10) time_minutes='0' + time_minutes;
if (tchk) {
var time_str= 'Сегодня ' + name_day[time.getDay()] + ', ' + time.getDate() + ' ' + name_month[time.getMonth()] + ' ' + time.getFullYear() + ' года, ' + time_hours + '<font color="#000000">:</font>' + time_minutes;
tchk=false;
} else {
var time_str= 'Сегодня ' + name_day[time.getDay()] + ', ' + time.getDate() + ' ' + name_month[time.getMonth()] + ' ' + time.getFullYear() + ' года, ' + time_hours + '<font color="#FFFFFF">:</font>' + time_minutes;
tchk=true;
}
$("#time").html(time_str);
setTimeout(getCurrentTime,1000);
}

$(document).ready(function(){
getCurrentTime();
});
</script>

<span id="time" style="font-size:16pt;font-family:Arial;"></span>
прохожий: alex | 11.10.2012, 10:13 #
А как сделать чтобы было АМ РМ?
прохожий: Виктор | 14.06.2013, 22:15 #
Пожалуйста объясните, как можно добавить возможность чтобы эти часики показывали время определенной временной зоны? К примеру текущее время Китая?
прохожий: Sanches | 12.07.2013, 17:57 #
Firebug стал выдавать ошибку:
obj_hours is null

это строка
obj_hours.innerHTML=time_wr;

Как избавиться от ошибки, подскажите, пожалуйста?
Автор статьи: admin | 19.10.2013, 00:03 #
Наверное, неправильно вставили код в страницу. Должен быть обязательно элемент
<span id="hours"></span>
перед кодом javascript.
прохожий: Армине | 09.11.2013, 14:57 #
Спасибо! Очень помогли.
Единственно была проблема как новичку, как разделить друг от друга часы день недели и дату, в итоге разобралась.

<html>

<head>
<title>Часы и дата на JavaScript</title>
</head>

<body>
<h1>Время,день недели и дата на JavaScript</h1>

<table width="250" border="0" cellpadding="0">
<tr>
<td align="center" valign="bottom"> <div style="font-size:86px" ><span id="hours" style="color:#FFF"></span>
</div>

<script type="text/javascript">

obj_hours=document.getElementById("hours");

name_month=new Array ("января","февраля","марта", "апреля","мая", "июня","июля","августа","сентября", "октября","ноября","декабря");
name_day=new Array ("воскресенье","понедельник", "вторник","среда","четверг", "пятница","суббота");

function wr_hours()
{
time=new Date();


time_min=time.getMinutes();
time_hours=time.getHours();
time_wr=((time_hours<10)?"0":"")+time_hours;
time_wr+=":";
time_wr+=((time_min<10)?"0":"")+time_min;
time_wr+="";


time_wr=" "+time_wr;

obj_hours.innerHTML=time_wr;
}

wr_hours();
setInterval("wr_hours();",1000);

</script>
<hr width="75%" align="center" style="color:#FFF"></td>
</tr>
<tr>
<td align="center" valign="middle" ><div style="font-size:48px" ><span id="day" style="color:#FFF"></span>
</div>

<script type="text/javascript">

obj_day=document.getElementById("day");

name_day=new Array ("воскресенье","понедельник", "вторник","среда","четверг", "пятница","суббота");

function wr_day()
{

time_wr=" "+name_day[time.getDay()]+"";

obj_day.innerHTML=time_wr;
}
wr_day();
setInterval("wr_day();",1000);
</script></td>
</tr>
<tr>
<td align="center" valign="middle"><div style="font-size:32px" ><span id="date" style="color:#FFF"></span>
</div>

<script type="text/javascript">

obj_date=document.getElementById("date");

name_month=new Array ("января","февраля","марта", "апреля","мая", "июня","июля","августа","сентября", "октября","ноября","декабря");

function wr_date()
{

time_wr=" "+time.getDate()+" "+name_month[time.getMonth()]+" "+time.getFullYear()+"";

obj_date.innerHTML=time_wr;
}
wr_date();
setInterval("wr_date();",1000);
</script></td>
</tr>
</table>

</body>
</html>

Но остался вопрос как менять фонт шрифта?
прохожий: Serge78rus | 08.04.2014, 19:04 #
А если к этому добавить отрисовку на html5 canvas, то можно получить вот такое: http://jsgadget.ru/jsclock.html
прохожий: Васёк | 15.10.2014, 06:02 #
Привет всем! Я сам начинающий чайник, и тоже бился над этим вопросом. Сейчас сделал вот так и вроде нечего выглядит. Можете менять стили и блоки местами. Вставил в нужный мне блок DIV в шапке шаблона!

<div id="privet_data_vrema"> <!-- Общий блок для приветствия, дня недели, даты и времени -->
<div id="privet"> <!-- Блок для приветствия -->
<script type="text/javascript">
day = new Date(); hour = day.getHours(); if (hour>=5 && hour<12) greeting = "Доброе утро!"; else { if (hour>=12 && hour<18) greeting = "Добрый день!"; else { if (hour>=18 && hour<24) greeting = "Добрый вечер!"; else { if (hour>=0 && hour<5) greeting = "Доброй ночи!"; } } } document.write(greeting);
</script></div>

<div id="den_nedeli"> <!-- Блок для дня недели -->
Сегодня! <script language="javascript" type="text/javascript"><!--
var d = new Date();
var day=new Array("Воскресенье","Понедельник","Вторник",
"Среда","Четверг","Пятница","Суббота");
document.write(day[d.getDay()]);
</script></div>

<div id="datas"> <!-- Блок для дня даты -->
<script language="javascript" type="text/javascript"><!--
var d = new Date();
var month=new Array("Января","Февраля","Марта","Апреля","Мая","Июня",
"Июля","Августа","Сентября","Октября","Ноября","Декабря");
document.write(d.getDate()+ " " + month[d.getMonth()]
+ " " + d.getFullYear() + " года!");
</script></div>

<div id="times"> <!-- Блок для времени -->
<span id="hours"></span>
<script type="text/javascript">
obj_hours=document.getElementById("hours");
function wr_hours()
{
time=new Date();

time_sec=time.getSeconds();
time_min=time.getMinutes();
time_hours=time.getHours();
time_wr=((time_hours<10)?"0":"")+time_hours;
time_wr+=":";
time_wr+=((time_min<10)?"0":"")+time_min;
time_wr+=":";
time_wr+=((time_sec<10)?"0":"")+time_sec;
obj_hours.innerHTML=time_wr;
}
wr_hours();
setInterval("wr_hours();",1000);
</script></div>
</div>

/*Стиль общего блока приветствия, день недели. дата, время*/
#privet_data_vrema{
margin:0px;
padding:0px;
height:46px;
width:330px;
border:1px solid #FF0;
}
#privet{
margin:0px;
padding:0px;
font-size:20px;
text-align:center;
color:#906;
}
#den_nedeli{
margin:0px;
margin-top:4px;
margin-right:10px;
padding:0px;
font-size:16px;
color:#0F0;
float:left;
}
#datas{
margin:0px;
margin-top:4px;
padding:0px;
font-size:16px;
color:#333;
}
#times{
margin:0px;
margin-top:-14px;
padding:0px;
font-size:16px;
color:#333;
float:right;
}
прохожий: RaynorRayders | 17.12.2015, 10:30 #
У меня вот такой вопрос: Как сделать так чтобы дата и время выводились на одном уровне с логотипом картинкой сайта? Код привожу ниже:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<html>
<head>
<title>Э.Ф.А. - Экономика. Финансы. Анализ.</title>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1251">
<meta name="generator" content="NeonHTML 4.5">
<style type="text/css">
body {
background-image:url(images/background.jpg);
background-repeat:no-repeat;
background-attachment:fixed;
}
</style>
</head>
<body>
<img src="images/logo1.jpg" />
<div><div style="text-align:right;"><span id="hours"></span>
</div>
<script language="JavaScript" type="text/javascript">
<!--
obj_hours=document.getElementById("hours");
name_month=new Array ("января","февраля","марта", "апреля","мая", "июня","июля","августа","сентября", "октября","ноября","декабря");
name_day=new Array ("воскресенье","понедельник", "вторник","среда","четверг", "пятница","суббота");
function wr_hours(){
time=new Date();
time_sec=time.getSeconds();
time_min=time.getMinutes();
time_hours=time.getHours();
time_wr=((time_hours<10)?"0":"")+time_hours;
time_wr+=":";
time_wr+=((time_min<10)?"0":"")+time_min;
time_wr+=":";
time_wr+=((time_sec<10)?"0":"")+time_sec;
time_wr=" Сегодня "+name_day[time.getDay()]+", "+time.getDate()+" "+name_month[time.getMonth()]+" "+time.getFullYear()+" г. время "+time_wr;
obj_hours.innerHTML=time_wr;
}
wr_hours();
setInterval("wr_hours();",1000);
-->
</script>
</body>
</html>
прохожий: FEEX | 24.02.2016, 16:42 #
примерно так:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<html>
<head>
<title>Э.Ф.А. - Экономика. Финансы. Анализ.</title>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1251">
<meta name="generator" content="NeonHTML 4.5">
<style type="text/css">
body {
background-image:url(images/background.jpg);
background-repeat:no-repeat;
background-attachment:fixed;
}
</style>
</head>
<body>

<div><div style="text-align:right;">
<img src="images/logo1.jpg" />
<span id="hours"></span>
</div>
<script language="JavaScript" type="text/javascript">
<!--
obj_hours=document.getElementById("hours");
name_month=new Array ("января","февраля","марта", "апреля","мая", "июня","июля","августа","сентября", "октября","ноября","декабря");
name_day=new Array ("воскресенье","понедельник", "вторник","среда","четверг", "пятница","суббота");
function wr_hours(){
time=new Date();
time_sec=time.getSeconds();
time_min=time.getMinutes();
time_hours=time.getHours();
time_wr=((time_hours<10)?"0":"")+time_hours;
time_wr+=":";
time_wr+=((time_min<10)?"0":"")+time_min;
time_wr+=":";
time_wr+=((time_sec<10)?"0":"")+time_sec;
time_wr=" Сегодня "+name_day[time.getDay()]+", "+time.getDate()+" "+name_month[time.getMonth()]+" "+time.getFullYear()+" г. время "+time_wr;
obj_hours.innerHTML=time_wr;
}
wr_hours();
setInterval("wr_hours();",1000);
-->
</script>
</body>
</html>
Добавить комментарий
Новости сайта
Последние публикации в каталоге статей