Не правильное отображение часов
Здравствуйте уважаемые форумчани!
Такая проблема, часы с разными часовыми поясами, некорректро отображают время, а именно некоторые часовые пояса отображаються в таком формате 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> |
Здравствуйте.
Вы выводили 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 P.S.: выделенный код добавлен для исключения ошибки "Cannot read property 'local' of undefined". |
Здравствуйте, спасибо за ответ!
Код находиться в html файле, а файл выводиться через iframe уже на сайте, код смотрю через мозилу и яндекс браузер, ошибка там и там присутствует. Пока что заметил что когда в Нью-Йорку 02:15 то выводит 0-2:15... а в Токио 06:15. Лично для меня - это темный лес( |
Здравствуйте.
Проанализируйте свой код... Особенно строку 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 с моими знаниями JS только анализировать(
Что-то вообще ничего не получается сделать, нужны часы для этих регионов и ничего не получается... Если вас не затруднит, объясните как все сделать как для простого смертного... Заранее спасибо! |
Здравствуйте.
Думал, что выше более или менее понятно описано. Что Вам конкретно не понятно?! 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 |
Мне не понятно как это все запустить в html файле с разными часовыми поясами...
Извините за такие глупые сообщения, но я в js вообще не разбираюсь... |
Давайте всю страницу и желательно опишите что и где должно отображаться.
|
Вы заслуживаете уважения!
Нужно чтобы время отсчитывалось от Гринвича в 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> |
Вложений: 1
Здравствуйте.
На jsFiddle сделал рабочий пример. В прикрепленном архиве все в одном файле. |
Часовой пояс GMT +3, время: 13:29. |