2015-12-01 4 views
0

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

<?php 
    $date1="2015-11-30 07:57:00"; 
    $date2=date('Y-m-d H:i:s'); 

    $diff=abs(strtotime($date2)-strtotime($date1)); 
    echo "<h1 style=\"color:red;\">".$diff."</h1>"; 
?> 

Тогда я думал использовать ajax-запрос для автоматического обновления каждую секунду.

function loadXMLDoc(){ 
    var xmlhttp=new XMLHttpRequest(); 
    xmlhttp.onreadystatechange=function(){ 
     if (xmlhttp.readyState==4 && xmlhttp.status==200){ 
      var totalsec=xmlhttp.responseText; 
      document.getElementById("ajaxDiv").innerHTML = totalsec; 
     } 
    } 
    xmlhttp.open("GET","dif_btw_dates.php",true); 
    xmlhttp.send(); 
} 
setInterval("loadXMLDoc()",1000); 

Теперь я хотел бы вычислить totalsec значение детерминированным количество минут, часов и дней. Но когда я попытался сделать любую операцию по математике над totalsec, как

var minutes=totalsec /60; 

я получаю ошибку NaN. Как преобразовать значение responseText в целое число, чтобы я мог выполнять математические операции? Благодарю.

+1

попробовать 'ParseInt()' или 'Number()' – Ramanlfc

+0

И когда сервер занимает больше времени, чем второй, чтобы вернуть ?? Hello log jam запросов Ajax накапливается и возвращается в неправильном порядке. Вам нужно либо прервать предыдущий запрос, если он открыт, либо подумать о другом решении. – epascarello

+0

Какова ценность 'totalsec'? –

ответ

2

Основная проблема заключается в том, что вы пытаетесь разобрать <h1 style="color:red;">123123</h1> в число. Также, как указано @LGSon, вы не должны делать аякс-вызов каждую секунду здесь.

Чтобы решить эту проблему, я бы отправить обратно две даты с сервера вместо этого, он мог бы выглядеть примерно так:

PHP:

<?php 
    $date1="2015-11-30 07:57:00"; 
    $date2=date('Y-m-d H:i:s'); 
    echo $date1 . "," . $date2; 
?> 

HTML:

<div id="ajaxDiv"> 
    <h1></h1> 
</div> 

CSS:

#ajaxDiv > h1{ 
    color: red; 
} 

и JS:

var date, 
    timezoneOffset; 

function loadXMLDoc(){ 
    var xmlhttp=new XMLHttpRequest(); 
    xmlhttp.onreadystatechange=function(){ 
     if (xmlhttp.readyState==4 && xmlhttp.status==200){ 
      var dates = xmlhttp.responseText.split(","); 
      timezoneOffset = Math.round((new Date() - new Date(dates[1]))/3600000); 
      date = new Date(dates[0]); 
     } 
    } 
    xmlhttp.open("GET","dif_btw_dates.php",true); 
    xmlhttp.send(); 
} 

function updateTime(){ 
    if(date === undefined) return; 
    var date2 = new Date(); 
    date2.setHours(date2.getHours() - timezoneOffset); 
    var totalsec = (date2 - date)/1000; 

    /* Here totalsec is a number and you can do your other operations like 
     var minutes=totalsec /60; */ 

    var ajaxDiv = document.getElementById("ajaxDiv"); 
    var h1 = ajaxDiv.getElementsByTagName("h1")[0]; 
    h1.innerHTML = totalsec; 

} 

loadXMLDoc(); 
setInterval(loadXMLDoc, 3600000); //Sync with server time once an hour 
setInterval(updateTime, 1000); 
+0

Спасибо. Теперь я понял, где проблема, и вы даете мне четкое предложение улучшить код. –

0
var sec = parseInt(xmlhttp.responseText); 
+0

Я пробовал эту функцию и не работал. –

+0

@ João. Тогда ваша проблема связана с сервером, на вашем php. – LGSon

+0

Какая ошибка? Причиной может быть то, что xmlhttp.responseText не является числом. – EylM

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