Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.10.2014, 01:32
Интересующийся
Отправить личное сообщение для dmax34 Посмотреть профиль Найти все сообщения от dmax34
 
Регистрация: 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>
Ответить с цитированием
  #2 (permalink)  
Старый 08.10.2014, 14:21
Аватар для XelaNimed
Интересующийся
Отправить личное сообщение для XelaNimed Посмотреть профиль Найти все сообщения от XelaNimed
 
Регистрация: 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.
Ответить с цитированием
  #3 (permalink)  
Старый 09.10.2014, 01:18
Интересующийся
Отправить личное сообщение для dmax34 Посмотреть профиль Найти все сообщения от dmax34
 
Регистрация: 08.10.2014
Сообщений: 16

Здравствуйте, спасибо за ответ!
Код находиться в html файле, а файл выводиться через iframe уже на сайте, код смотрю через мозилу и яндекс браузер, ошибка там и там присутствует. Пока что заметил что когда в Нью-Йорку 02:15 то выводит 0-2:15... а в Токио 06:15.
Лично для меня - это темный лес(
Ответить с цитированием
  #4 (permalink)  
Старый 09.10.2014, 20:54
Аватар для XelaNimed
Интересующийся
Отправить личное сообщение для XelaNimed Посмотреть профиль Найти все сообщения от XelaNimed
 
Регистрация: 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.
Ответить с цитированием
  #5 (permalink)  
Старый 10.10.2014, 03:49
Интересующийся
Отправить личное сообщение для dmax34 Посмотреть профиль Найти все сообщения от dmax34
 
Регистрация: 08.10.2014
Сообщений: 16

XelaNimed с моими знаниями JS только анализировать(
Что-то вообще ничего не получается сделать, нужны часы для этих регионов и ничего не получается...
Если вас не затруднит, объясните как все сделать как для простого смертного...
Заранее спасибо!
Ответить с цитированием
  #6 (permalink)  
Старый 10.10.2014, 14:37
Аватар для XelaNimed
Интересующийся
Отправить личное сообщение для XelaNimed Посмотреть профиль Найти все сообщения от XelaNimed
 
Регистрация: 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
Ответить с цитированием
  #7 (permalink)  
Старый 10.10.2014, 23:52
Интересующийся
Отправить личное сообщение для dmax34 Посмотреть профиль Найти все сообщения от dmax34
 
Регистрация: 08.10.2014
Сообщений: 16

Мне не понятно как это все запустить в html файле с разными часовыми поясами...
Извините за такие глупые сообщения, но я в js вообще не разбираюсь...
Ответить с цитированием
  #8 (permalink)  
Старый 13.10.2014, 19:34
Аватар для XelaNimed
Интересующийся
Отправить личное сообщение для XelaNimed Посмотреть профиль Найти все сообщения от XelaNimed
 
Регистрация: 07.02.2010
Сообщений: 23

Давайте всю страницу и желательно опишите что и где должно отображаться.
Ответить с цитированием
  #9 (permalink)  
Старый 14.10.2014, 00:04
Интересующийся
Отправить личное сообщение для dmax34 Посмотреть профиль Найти все сообщения от dmax34
 
Регистрация: 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>
Ответить с цитированием
  #10 (permalink)  
Старый 15.10.2014, 14:45
Аватар для XelaNimed
Интересующийся
Отправить личное сообщение для XelaNimed Посмотреть профиль Найти все сообщения от XelaNimed
 
Регистрация: 07.02.2010
Сообщений: 23

Здравствуйте.
На jsFiddle сделал рабочий пример. В прикрепленном архиве все в одном файле.
Вложения:
Тип файла: zip WorldTime.zip (732 байт, 10 просмотров)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
скрипт, обрезающий строки zlodiak Элементы интерфейса 31 23.02.2016 20:02
Таймер: Осталось часов, минут, секунд до lammeR Общие вопросы Javascript 7 02.09.2013 20:59
jquery-gp-gallery.js - разное отображение подгружаемых изображений frutality jQuery 1 09.09.2012 18:15
Неккоректное отображение jquery меню в Google Chrome и Opera Galyanov Opera, Safari и др. 6 25.01.2011 00:26
Как рассчитать дату и время по количеству дней и часов skalka Общие вопросы Javascript 4 01.10.2010 09:21