2013-09-04 2 views
0

У меня есть рабочие часы для моего локального сервера и для моего браузера (локальная система). Оба отлично работают. Теперь я хочу найти временное смещение между часами, основанное на секундах, и добавить его к локальным системным часам.Создание часов, связанных с зоной

Например: мои системные часы: 10:00:00, а часы сервера - 12:15:00 в тот же день. , тогда смещение будет: 02:15:00 (конечно, это будет в секундах, но только для примера я написал его таким образом). И затем добавьте его в (браузер) по местному времени, чтобы я в итоге смог показать время сервера. 12:15:00.

Это то, что я делаю здесь:

var interval = self.setInterval(function(){ 
    clock(); 
},1000); 

function clock() 
{ 
    //Get local server time 
    <?php $today = getdate(); ?>; 
    var ser = <?php echo $today[0]; ?>; 

    //Local client time 
    var seconds = Date.now(); 
    var offset = seconds-ser*1000; 
    parseInt(offset/1000); 

    var d = new Date(); 
    d.setTime(Date.now()-offset); 
    var h = d.getHours(); 
    var m = d.getMinutes(); 
    var s = d.getSeconds(); 

    if(s < 10) 
     s = "0" + s; 
    if(m < 10) 
     m = "0" + m; 
    if(h < 10) 
     h = "0" + h; 

    var tm = h+":"+m+":"+s; 
    document.getElementById("clock").value = tm; 
} 

Но как только я ставлю переменную

offset 

в этой строке: d.setTime(Date.now()-offset);

часы не обновления больше. Я думаю, что есть проблема с совместимостью с PHP. Любая идея, как ее решить? Благодаря

ответ

1

Расчет смещения должен быть вне repeadly вызываемой функции:

//Get local server time 
<?php $today = getdate(); ?>; 
var ser = <?php echo $today[0]; ?>; 

//Local client time 
var seconds = Date.now(); 
var offset = seconds-ser*1000; 
parseInt(offset/1000); // BY THE WAY: As the returnval of parseInt isn't stored anywhere, this line does nothing 

var interval = self.setInterval(function(){ 
    clock(); 
},1000); 

function clock() 
{ 

    var d = new Date(); 
    d.setTime(Date.now()-offset); 
    var h = d.getHours(); 
    var m = d.getMinutes(); 
    var s = d.getSeconds(); 

    if(s < 10) 
     s = "0" + s; 
    if(m < 10) 
     m = "0" + m; 
    if(h < 10) 
     h = "0" + h; 

    var tm = h+":"+m+":"+s; 
    document.getElementById("clock").value = tm; 
} 
+0

Да, он полагает, что находится вне функции. Теперь часы снова тикают. И, как указано, вы и @briosheje указали на глупую ошибку в магазине parseInt(). Благодарю. – MaD

1

Может быть, вы что-то с «ParseInt» не хватает?

parseInt требует переменную для сохранения значения.

Так что, если вы пишете:

var offset = seconds-ser*1000; 
    parseInt(offset/1000); 

Это как если вы пишете:

var offset = seconds-ser*1000; 

Итак, замените:

var offset = seconds-ser*1000; 
    parseInt(offset/1000); 

с этим:

var offset = seconds-ser*1000; 
offset = parseInt(offset/1000); 

Пробовал в моем браузере и работает.

Весь сценарий должен выглядеть следующим образом (я использовал console.log вместо этого):

var interval = self.setInterval(function(){ 
       clock(); 
      },1000); 

      function clock() 
      { 
       //Get local server time 
       <?php $today = getdate(); ?>; 
       var ser = new Date(<?php echo $today[0]; ?>); 
       var seconds = Date.now(); 
       var offset = seconds-ser*1000; 
       offset = parseInt(offset/1000); 

       //Local client time 


       var d = new Date(); 
       d.setTime(Date.now()-offset); 
       var h = d.getHours(); 
       var m = d.getMinutes(); 
       var s = d.getSeconds(); 

       if(s < 10) 
        s = "0" + s; 
       if(m < 10) 
        m = "0" + m; 
       if(h < 10) 
        h = "0" + h; 

       var tm = h+":"+m+":"+s; 
       console.log(tm); 
      } 

Просто разобрать ваш console.log, где он должен быть разобран.

+0

Если я это сделаю: offset = parseInt (offset/1000); то часы работают, но если я это сделаю: offset = parseInt (offset); часы останавливаются. – MaD

+0

Возможно, parseInt (смещение), не деленное на 1000, слишком велико, чтобы быть вычтенным на дату? В чем проблема? Вам нужно разделить на смещение или смещение/1000? – briosheje

+0

Это действительно проблема, но как только я поместил код вне функции, он начал работать, и математическая манипуляция необходима, потому что getdate() возвращается в миллисекундах, а Date.Now() возвращается в секундах. Вот почему я это сделал. В любом случае, извините, если я не понял это и спасибо за помощь. – MaD

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