Отсчёт времени на js, учитывая UTC

Шкалу времени UTC ввели взамен шкалы GMT ещё в 1972 году.

Для всех гражданских нужд сейчас используется именно шкала UTC, и часовые пояса обозначаются сдвигом относительно UTC: UTC+3, UTC+4. Шкала GMT уже никем не поддерживается. Все источники времени (хоть NTP-серверы в инете, хоть GPS-спутники, хоть наземные станции точного времени) сейчас поставляют время только в UTC. Использовать GMT вместо UTC уже давно неверно (ладно ещё в 70-х и 80-х годах прошлого века это делали по старой привычке, но в 21-м веке это уж совсем недопустимо). Тот факт, что в настройках времени Windows часовые пояса обозначены по непонятным причинам через GMT, — это фэйл их разработчиков и нарушение международных стандартов. Они почему-то тупили и исправили эту ситуацию только в Win7 и Win2008-R2 (там уже время обозначено через UTC).

Сделаем вывод текущего времени в браузере средствами js. Вывод времени должнен быть в real time. Если в операционной системе время настроено не верно, то и в браузере будет выводиться не верное время. Также будет указано смещение относительно времени сервера. Время сервера предварительно получаем с помощью php-функции date().

Итак, создадим div, в котором будем выводить часы:

<div id="timeLocation"></div>

И добавим javascript-код:

<script type="text/javascript">
	var locale_time_start = new Date(); /*get locale time*/
	var server_time = new Date('<?php echo date('d F Y H:i:s');?>'); /*get server time*/
	var specification_time = getTimeDifference(locale_time_start, server_time);

	function showTime() {
		var server_time_zone = '<?php echo date('\U\T\C P');?>'; /*time offset*/
		var locale_time = new Date(); /*get locale time*/
		locale_time.setHours(locale_time.getHours()-specification_time[0]);
		var dH=''+locale_time.getHours();dH=dH.length<2?'0'+dH:dH;
		locale_time.setMinutes(locale_time.getMinutes()-specification_time[1]);
		var dM=''+locale_time.getMinutes();dM=dM.length<2?'0'+dM:dM;
		locale_time.setSeconds(locale_time.getSeconds()-specification_time[2]);
		var dS=''+locale_time.getSeconds();dS=dS.length<2?'0'+dS:dS;
		var tmp=dH+':'+dM+':'+dS+' '+server_time_zone;
		document.getElementById('timeLocation').innerHTML=tmp;
		var t=setTimeout('showTime()',1000); /*рекурсивный вызов каждую сек. для корректировки времени*/
	}

	function getTimeDifference(time_1, time_2) {
		var hovers_difference = time_1.getHours() - time_2.getHours();
		var minutes_difference = time_1.getMinutes() - time_2.getMinutes();
		var seconds_difference = time_1.getSeconds() - time_2.getSeconds();
		var time_difference = [hovers_difference, minutes_difference, seconds_difference];
		return time_difference;
	}

	showTime(); /*выполняем ф-ю вывода времени*/
</script>

 

Demo js time

 
 
 
 

icon Комментарии 0

Ваш комментарий к статье.. (для авторизованных)

ctrl+enter

icon Вход в систему

зарегистрироваться
НОВЫЕ ПОЛЬЗОВАТЕЛИ