2015-08-29 1 views
2

Хорошие дни. У меня есть этот красивый и чистый код для работающих часов.Установка часового пояса для работы часов в JavaScript

<script type="text/javascript"> 

function DisplayTime(){ 
if (!document.all && !document.getElementById) 
return 
timeElement=document.getElementById? document.getElementById("curTime"): document.all.tick2 
var CurrentDate=new Date() 
var hours=CurrentDate.getHours() 
var minutes=CurrentDate.getMinutes() 
var seconds=CurrentDate.getSeconds() 
var DayNight="PM" 
if (hours<12) DayNight="AM"; 
if (hours>12) hours=hours-12; 
if (hours==0) hours=12; 
if (minutes<=9) minutes="0"+minutes; 
if (seconds<=9) seconds="0"+seconds; 
var currentTime=hours+":"+minutes+":"+seconds+" "+DayNight; 
timeElement.innerHTML="<font style='font-family:Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800&subset=latin,cyrillic-ext,latin-extfont-size:14px;color:#fff;'>"+currentTime+"</b>" 
setTimeout("DisplayTime()",1000) 
} 
window.onload=DisplayTime 

</script> 

Моя единственная проблема - это системное время. Как настроить часовой пояс так, чтобы он отображал правильное время, основанное на указанном часовом поясе?

+0

Я думаю, вы не можете - JS зависит исключительно от времени клиента! –

+0

Объект date получает время с устройства пользователя. Это основано исключительно на стороне клиента. Я думаю, что время на стороне сервера получает стандартный часовой пояс (UTC), в противном случае клиентская сторона зависит от часового пояса пользователя. –

+1

Боковое примечание: этот код * ужасный * и ужасно устарел. Он не может использовать базовые соглашения JavaScript, полагается на ужас, который является автоматической точкой с запятой (но иногда), имеет обходное решение для браузеров, у которых нет 'getElementById' (их больше нет и они не были 15 лет или около того), использует длинный-устаревший и теперь фактически недействительный элемент 'font', создает ненужный глобальный ... –

ответ

0

Я внедрил ваш рабочий код, добавив еще одну функцию, чтобы получить то, что вы хотите. Смотрите это поможет

function DisplayTime(timeZoneOffsetminutes){ 
 
if (!document.all && !document.getElementById) 
 
return 
 
timeElement=document.getElementById? document.getElementById("curTime"): document.all.tick2 
 
var requiredDate=getTimeZoneTimeObj(timeZoneOffsetminutes) 
 
var hours=requiredDate.h; 
 
var minutes=requiredDate.m; 
 
var seconds=requiredDate.s; 
 
var DayNight="PM"; 
 
if (hours<12) DayNight="AM"; 
 
if (hours>12) hours=hours-12; 
 
if (hours==0) hours=12; 
 
if (minutes<=9) minutes="0"+minutes; 
 
if (seconds<=9) seconds="0"+seconds; 
 
var currentTime=hours+":"+minutes+":"+seconds+" "+DayNight; 
 
timeElement.innerHTML="<font style='font-family:Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800&subset=latin,cyrillic-ext,latin-extfont-size:14px;color:#fff;'>"+currentTime+"</b>" 
 
setTimeout("DisplayTime(-330)",1000) 
 
} 
 
window.onload=DisplayTime(-330); 
 
function getTimeZoneTimeObj(timeZoneOffsetminutes){ 
 
    var localdate = new Date() 
 
    var timeZoneDate = new Date(localdate.getTime() + ((localdate.getTimezoneOffset()- timeZoneOffsetminutes)*60*1000)); 
 
    return {'h':timeZoneDate.getHours(),'m':timeZoneDate.getMinutes(),'s':timeZoneDate.getSeconds()}; 
 
}
#curTime{ 
 
background-color:#000; 
 
}
<div id="curTime"></div>

+0

Вау, спасибо! Именно то, что мне нужно! Что мне нужно изменить, чтобы установить часовой пояс на GMT +8? –

+0

для GMT + 8 изменить параметр функции на - (8 * 60), т.е. -480 –

0

посетить этот link в качестве ссылки

пример:

var x = new Date(); 
var currentTimeZoneOffsetInHours = x.getTimezoneOffset()/60; 
3

Там нет ничего, встроенный в объект Date JavaScript, который обрабатывает любые другие, чем местные (системы) и времени UTC часовых поясов.

Вы можете сделать это, давая ваш Date экземпляра в неправильное время, используя дельту между одним из этих часовых поясов (локальных или UTC) и часового пояса, который необходимо использовать. Это проще, если вы используете UTC.

Так, например, сказать, что мы хотим, чтобы наше время в GMT + 01: 00:

var dt = new Date(); 
dt.setTime(dt.getTime() + (60 * 60 * 1000)); 
//       ^^^^^^^^^^^^^^---- one hour in milliseconds, 
//           which is our offset from UTC/GMT 
var hours = dt.getUTCHours();  // Use UTC methods to get time 
var minutes = dt.getUTCMinutes(); 
var seconds = dt.getUTCSeconds(); 

время материал, особенно с часовыми поясами, трудно. Вы можете посмотреть на использование библиотеки для нее, хотя для таких часов, которые были бы излишними. Одна хорошая библиотека - MomentJS (у которой есть надстройка часового пояса).

+0

как насчет moment.js? что оно делает? – Alex

+1

@Alex: Как ни странно, я только что добавил к MomentJS записку. Overkill для просто этих простых часов, но если кто-то делает что-то более сильное ... –

1

Вы можете использовать метод getTimezoneOffset объекта Date. Это дает вам временное смещение в соответствии с вашим часовым поясом в минутах.

Так что для того, чтобы получить текущее время в формате UTC (+0 часовой пояс), вы можете сделать что-то в этом роде:

var tzOffset = CurrentDate.getTimezoneOffset(); 

// some timezones are not set hours, so we must calculate the minutes 
var minutesOffset = parseInt(tzOffset%60,10); 

// the offset hours for the timezone 
var hoursOffset = parseInt(tzOffset/60, 10); 

Тогда вам нужно сделать некоторую математику в вашем коде, чтобы учесть смещение:

var hours = CurrentDate.getHours() + hoursOffset; 
var minutes = CurrentDate.getMinutes() + minutesOffset; 

Это будет отвечать за ваш часовой пояс. Если вы хотите рассчитать другой часовой пояс, который вы указали, измените tzOffset выше, чтобы показать свой часовой пояс.

var tzOffset = CurrentDate.getTimezoneOffset() + TIMEZONE_HOURS*60; 

TIMEZONE_HOURS является часовой пояс в часах вы хотите, например, если вы хотите UTC + 3, вы должны установить TIMEZONE_HOURS в 3.

В целом временные интервалы - это довольно сложная задача, потому что они сильно меняются, и с ними есть некоторые оговорки. Если вы хотите больше остановиться на этом, проверьте this answer в другом вопросе на SO

0

Вы можете попробовать использовать moment.js

Это очень хорошая библиотека, которая обрабатывает часовые пояса тоже.

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