08.10.2014, 01:32
|
Интересующийся
|
|
Регистрация: 08.10.2014
Сообщений: 16
|
|
Не правильное отображение часов
Здравствуйте уважаемые форумчани!
Такая проблема, часы с разными часовыми поясами, некорректро отображают время, а именно некоторые часовые пояса отображаються в таком формате 0-2:12:56
Помогите убрать этот косяк, моих знаний просто не хватает для этого, и если можно, уберите отображения секунд...
Заранее огромное спасибо!
<SCRIPT LANGUAGE="JavaScript">
<!-- Begin
function GetTime() {
var dt = new Date();
var def = dt.getTimezoneOffset()/60;
var gmt = (dt.getHours() + def);
document.clock.local.value = (IfZero(dt.getHours()) + ":" + IfZero(dt.getMinutes()) + ":" + IfZero(dt.getSeconds()));
var ending = ":" + IfZero(dt.getMinutes()) + ":" + IfZero(dt.getSeconds());
var isr =check24(((gmt - 4) > 24) ? ((gmt - 4) - 24) : (gmt - 4));
document.clock.NewYork.value = (IfZero(isr) + ending);
var msw =check24(((gmt + 1) > 24) ? ((gmt + 1) - 24) : (gmt + 1));
document.clock.London.value = (IfZero(msw) + ending);
var baku =check24(((gmt + 9) > 24) ? ((gmt + 9) - 24) : (gmt + 9));
document.clock.Tokyo.value = (IfZero(baku) + ending);
var del =check24(((gmt - 4) > 24) ? ((gmt - 4) - 24) : (gmt - 4));
document.clock.Cydney.value = (IfZero(del) + ending);
var dh =check24(((gmt + 4) > 24) ? ((gmt + 4) - 24) : (gmt + 4));
document.clock.Moscow.value = (IfZero(dh) + ending);
var kok =check24(((gmt +3 ) > 24) ? ((gmt +3 ) - 24) : (gmt + 3));
document.clock.Kiev.value = (IfZero(kok) + ending);
var _GMT =check24(((gmt) > 24) ? ((gmt) - 24) : (gmt));
document.clock._GMT.value = (IfZero(_GMT) + ":" + IfZero(dt.getMinutes()) + ":" + IfZero(dt.getSeconds()));
setTimeout("GetTime()", 1000);
}
function IfZero(num) {
return ((num <= 9) ? ("0" + num) : num);
}
function check24(hour) {
return (hour >= 24) ? hour - 24 : hour;
}
// End -->
</script>
|
|
08.10.2014, 14:21
|
|
Интересующийся
|
|
Регистрация: 07.02.2010
Сообщений: 23
|
|
Здравствуйте.
Вы выводили document.clock в консоль? Как Вы выводите результаты? В каких браузерах наблюдается ошибка?
Запустил Ваш код на Google Chrome v.37.0.2062.124 и вывел переменные в консоль (__proto убрано для "удобочитаемости").
function GetTime() {
console.clear();
var dt = new Date();
console.log("dt=%O", dt);
var def = dt.getTimezoneOffset()/60;
console.log("def="+def);
var gmt = (dt.getHours() + def);
console.log("gmt="+gmt);
*!*
document.clock = {
"local" : {},
"NewYork" : {},
"London" : {},
"Tokyo" : {},
"Cydney" : {},
"Moscow" : {},
"Kiev" : {},
"_GMT" : {}
};
*/!*
document.clock.local.value = (IfZero(dt.getHours()) + ":" + IfZero(dt.getMinutes()) + ":" + IfZero(dt.getSeconds()));
var ending = ":" + IfZero(dt.getMinutes()) + ":" + IfZero(dt.getSeconds());
console.log("ending="+ending);
var isr =check24(((gmt - 4) > 24) ? ((gmt - 4) - 24) : (gmt - 4));
document.clock.NewYork.value = (IfZero(isr) + ending);
var msw =check24(((gmt + 1) > 24) ? ((gmt + 1) - 24) : (gmt + 1));
document.clock.London.value = (IfZero(msw) + ending);
var baku =check24(((gmt + 9) > 24) ? ((gmt + 9) - 24) : (gmt + 9));
document.clock.Tokyo.value = (IfZero(baku) + ending);
var del =check24(((gmt - 4) > 24) ? ((gmt - 4) - 24) : (gmt - 4));
document.clock.Cydney.value = (IfZero(del) + ending);
var dh =check24(((gmt + 4) > 24) ? ((gmt + 4) - 24) : (gmt + 4));
document.clock.Moscow.value = (IfZero(dh) + ending);
var kok =check24(((gmt +3 ) > 24) ? ((gmt +3 ) - 24) : (gmt + 3));
document.clock.Kiev.value = (IfZero(kok) + ending);
var _GMT =check24(((gmt) > 24) ? ((gmt) - 24) : (gmt));
document.clock._GMT.value = (IfZero(_GMT) + ":" + IfZero(dt.getMinutes()) + ":" + IfZero(dt.getSeconds()));
console.log("document.clock=%O", document.clock);
}
function IfZero(num) {
return ((num <= 9) ? ("0" + num) : num);
}
function check24(hour) {
return (hour >= 24) ? hour - 24 : hour;
}
GetTime();
Код:
|
// Console output
dt=Wed Oct 08 2014 12:10:21 GMT+0200 (Central Europe Daylight Time)
def=-2
gmt=10
ending=":10:21"
document.clock=Object
Cydney: Object
value: "06:10:21"
Kiev: Object
value: "13:10:21"
London: Object
value: "11:10:21"
Moscow: Object
value: "14:10:21"
NewYork: Object
value: "06:10:21"
Tokyo: Object
value: "19:10:21"
_GMT: Object
value: "10:10:21"
local: Object
value: "12:10:21" |
Можете сами запустить в Chrome и посмотреть на вывод.
P.S.: выделенный код добавлен для исключения ошибки "Cannot read property 'local' of undefined".
Последний раз редактировалось XelaNimed, 10.10.2014 в 10:48.
|
|
09.10.2014, 01:18
|
Интересующийся
|
|
Регистрация: 08.10.2014
Сообщений: 16
|
|
Здравствуйте, спасибо за ответ!
Код находиться в html файле, а файл выводиться через iframe уже на сайте, код смотрю через мозилу и яндекс браузер, ошибка там и там присутствует. Пока что заметил что когда в Нью-Йорку 02:15 то выводит 0-2:15... а в Токио 06:15.
Лично для меня - это темный лес(
|
|
09.10.2014, 20:54
|
|
Интересующийся
|
|
Регистрация: 07.02.2010
Сообщений: 23
|
|
Здравствуйте.
Проанализируйте свой код... Особенно строку
check24(((gmt - х) > 24) ? ((gmt - х) - 24) : (gmt - х))
Может так пойдет?!
function GetTime() {
var offset = arguments[0] || 0;
var d = new Date();
// количество миллисекунд, прошедших с 1 января 1970
var localTime = d.getTime();
// получаем локальное UTC смещение в минутах и конвертируем в миллисекунды
var localOffset = d.getTimezoneOffset() * 60000;
// получаем текущее время UTC добавляя сдвиг местного времени
var utc = localTime + localOffset;
return new Date(utc + (3600000 * offset));
}
// Пример использования
var cities = {
"Almaty" : 6,
"Amman" : 2,
"Amsterdam" : 1,
"Buenos Aires" : -3,
"Baghdad" : 3,
"Bahrain" : 3,
"Baku" : 4,
"Bangkok" : 7,
"Berlin" : 1,
"Bombay" : 5.5
};
console.log("Local time is "+new Date().toLocaleString());
for(var city in cities){
var offset = cities[city];
console.log("Local time in "+city+" is "+GetTime(offset).toLocaleString());
}
Последний раз редактировалось XelaNimed, 10.10.2014 в 14:09.
|
|
10.10.2014, 03:49
|
Интересующийся
|
|
Регистрация: 08.10.2014
Сообщений: 16
|
|
XelaNimed с моими знаниями JS только анализировать(
Что-то вообще ничего не получается сделать, нужны часы для этих регионов и ничего не получается...
Если вас не затруднит, объясните как все сделать как для простого смертного...
Заранее спасибо!
|
|
10.10.2014, 14:37
|
|
Интересующийся
|
|
Регистрация: 07.02.2010
Сообщений: 23
|
|
Здравствуйте.
Думал, что выше более или менее понятно описано. Что Вам конкретно не понятно?!
function GetTime() {
var offset = arguments[0] || 0;
var d = new Date();
var localTime = d.getTime();
var localOffset = d.getTimezoneOffset() * 60000;
var utc = localTime + localOffset;
return new Date(utc + (3600000 * offset));
}
// GetTime(-5) -> вернет экземпляр объекта Date
// для UTC -5
// Detroit, Havana, Jamaica, Panama, Toronto
|
|
10.10.2014, 23:52
|
Интересующийся
|
|
Регистрация: 08.10.2014
Сообщений: 16
|
|
Мне не понятно как это все запустить в html файле с разными часовыми поясами...
Извините за такие глупые сообщения, но я в js вообще не разбираюсь...
|
|
13.10.2014, 19:34
|
|
Интересующийся
|
|
Регистрация: 07.02.2010
Сообщений: 23
|
|
Давайте всю страницу и желательно опишите что и где должно отображаться.
|
|
14.10.2014, 00:04
|
Интересующийся
|
|
Регистрация: 08.10.2014
Сообщений: 16
|
|
Вы заслуживаете уважения!
Нужно чтобы время отсчитывалось от Гринвича в 24 формате без секунд и желательно, если это возможно с коррекцией (Зима/Лето)
Такой метод используется на сайте 24timezones.com/online_clock.php (не реклама) но у меня не получилось перенести скрипты на ПК так что бы они работали... Может у вас получится...
А если использовать несколько часов с данного сайта, то при загрузке страницы, не все часы отображаються, нужно еще раз обновить страницу чтобы все часы загрузились, и исходя из этого, часы с данного сайта мало интересуют...
И заранее большое человеческое спасибо за помощь!
В общем вот сам код страницы
<SCRIPT LANGUAGE="JavaScript">
function GetTime() {
console.clear();
var dt = new Date();
console.log("dt=%O", dt);
var def = dt.getTimezoneOffset()/60;
console.log("def="+def);
var gmt = (dt.getHours() + def);
console.log("gmt="+gmt);
document.clock.local.value = (IfZero(dt.getHours()) + ":" + IfZero(dt.getMinutes()) + ":" + IfZero(dt.getSeconds()));
var ending = ":" + IfZero(dt.getMinutes()) + ":" + IfZero(dt.getSeconds());
console.log("ending="+ending);
var isr =check24(((gmt - 4) > 24) ? ((gmt - 4) - 24) : (gmt - 4));
document.clock.NewYork.value = (IfZero(isr) + ending);
var msw =check24(((gmt + 1) > 24) ? ((gmt + 1) - 24) : (gmt + 1));
document.clock.London.value = (IfZero(msw) + ending);
var baku =check24(((gmt + 9) > 24) ? ((gmt + 9) - 24) : (gmt + 9));
document.clock.Tokyo.value = (IfZero(baku) + ending);
var del =check24(((gmt - 4) > 24) ? ((gmt - 4) - 24) : (gmt - 4));
document.clock.Cydney.value = (IfZero(del) + ending);
var dh =check24(((gmt + 4) > 24) ? ((gmt + 4) - 24) : (gmt + 4));
document.clock.Moscow.value = (IfZero(dh) + ending);
var kok =check24(((gmt +3 ) > 24) ? ((gmt +3 ) - 24) : (gmt + 3));
document.clock.Kiev.value = (IfZero(kok) + ending);
var _GMT =check24(((gmt) > 24) ? ((gmt) - 24) : (gmt));
document.clock._GMT.value = (IfZero(_GMT) + ":" + IfZero(dt.getMinutes()) + ":" + IfZero(dt.getSeconds()));
console.log("document.clock=%O", document.clock);
}
function IfZero(num) {
return ((num <= 9) ? ("0" + num) : num);
}
function check24(hour) {
return (hour >= 24) ? hour - 24 : hour;
}
GetTime();
</script>
<BODY onLoad="javascript:GetTime();">
<form class="clo_fo"name="clock">
<div class="world_time">
<div class="w_time_bor">
<span style="display:none;"><strong>Local Time <input type="text" size="8" name="local"></strong></span>
<div class="wtime">
<div class="wtime_t">
Гринвич
</div>
<div class="wtime_c">
<input type="text" size="8" name="_GMT">
</div>
<div class="uts_t">(UTS 0)</div>
</div>
<div class="wtime">
<div class="wtime_t">
Нью-Йорк
</div>
<div class="wtime_c">
<input type="text" size="8" name="NewYork">
</div>
<div class="uts_t">(UTS -4)</div>
</div>
<div class="wtime">
<div class="wtime_t">
Лондон
</div>
<div class="wtime_c">
<input type="text" size="8" name="London">
</div>
<div class="uts_t">(UTS +1)</div>
</div>
<div class="wtime">
<div class="wtime_t">
Токио
</div>
<div class="wtime_c">
<input type="text" size="8" name="Tokyo">
</div>
<div class="uts_t">(UTS +9)</div>
</div>
<div class="wtime">
<div class="wtime_t">
Сидней
</div>
<div class="wtime_c">
<input type="text" size="8" name="Cydney">
</div>
<div class="uts_t">(UTS -4)</div>
</div>
<div class="wtime">
<div class="wtime_t">
Москва
</div>
<div class="wtime_c">
<input type="text" size="8" name="Moscow">
</div>
<div class="uts_t">(UTS +4)</div>
</div>
<div class="wtime">
<div class="wtime_t">
Киев
</div>
<div class="wtime_c">
<input type="text" size="8" name="Kiev">
</div>
<div class="uts_t">(UTS +3)</div>
</div>
</div>
</div>
</form>
|
|
15.10.2014, 14:45
|
|
Интересующийся
|
|
Регистрация: 07.02.2010
Сообщений: 23
|
|
Здравствуйте.
На jsFiddle сделал рабочий пример. В прикрепленном архиве все в одном файле.
|
|
|
|