2012-01-14 120 views
2

我正在開發一個使用PHP和MySQL以及一點點javascript的打字應用程序。 PHP代碼用於獲取服務器時間。我正在使用以下javascript函數來顯示瀏覽器中的開始時間和結束時間(通過在啓動時間的分鐘值上添加5分鐘)。爲什麼這段代碼對某些特定輸入顯示奇怪的值?

function display(){ 
// get the server time using PHP and print the start time and end time 
var servDateArray='<?php print date("Y/n/d/H/i/s", time())?>'.split('/'); 
starttime_year = servDateArray[0]; 
starttime_month = servDateArray[1]; 
starttime_day = servDateArray[2]; 
starttime_hour = servDateArray[3]; 
starttime_minutes = servDateArray[4]; 
starttime_seconds = servDateArray[5]; 

// print the Start time 
document.getElementById("starttime_echoed").innerHTML= starttime_hour+":"+starttime_minutes+":"+starttime_seconds; 
                             document.typing.starttime.value=starttime_hour+":"+starttime_minutes+":"+starttime_seconds; 

// print the End time 
endtime_hour = parseInt(starttime_hour) + 0; 
endtime_min = parseInt(starttime_minutes) + 5; 
endtime_sec = parseInt(starttime_seconds) + 0; 

if (endtime_sec>=60) { endtime_sec = -(60 - endtime_sec); endtime_min = parseInt(endtime_min)+1; } 
if (endtime_min>=60) { endtime_min = -(60 - endtime_min); endtime_hour = parseInt(endtime_hour)+1; } 
if (endtime_hour>=24) { endtime_hour = -(24 - endtime_hour); } 
if (endtime_sec<=9) { endtime_sec="0"+endtime_sec; } 
if (endtime_min<=9) { endtime_min="0"+endtime_min; } 
if (endtime_hour<=9) { endtime_hour="0"+endtime_hour; } 
document.getElementById("endtime_echoed").innerHTML= endtime_hour+":"+endtime_min+":"+endtime_sec; 
document.typing.endtime.value=endtime_hour+":"+endtime_min+":"+endtime_sec; 
displayTimer(); 
} 

上面的代碼工作得很好的小時,分​​鍾和秒節選所有輸入值時的小時,分​​鍾和秒被設置爲8或9。然而,我試圖通過插入線的調試code alert(parseInt(starttime_minutes));行後endtime_min = parseInt(starttime_minutes)+ 5;當我提供8或9作爲分鐘值時它返回0。我相信這個函數返回0小時,分鐘和秒。具體而言,我給你舉個例子:如果服務器時間是08:09:37,那麼結束時間將變成00:05:37。我感到困惑。請幫忙。

回答

4

0809是無效的數字,因爲0前綴表示該數字是八進制數,而八進制數字僅上升到7。刪除最初的0

1

伊格納西奧得到了正確的答案,但我會跟進一些其他建議。你的代碼是一個可怕的混亂,以非常複雜的方式做各種不必要的日期操作。你可以一大塊腳本減少到這一點:

<?php 
    $now = time(); 
?> 
var startTime = new Date(<?php echo $now * 1000 ?>); 
var endTime = new Date(<?php echo ($now + (5 * 60)) * 1000?>); 

的JS日期對象會給你的當前時/分/秒startTime.getMinutes().getHours().getSeconds(),等等......沒有必要將其解壓分成不同的變量。

對於更新時間計算,你只需做這樣的事情:

var newTime = new Date(startTime.getTime() + 1000); // increment by 1 second 

,而不是你的醜「添加第二個,檢查它是否溢出,更新分鐘,如果分鐘溢出,更新時間等。 ..「代碼。 JS可以用這一行代碼完成所有這些工作。

相關問題