2012-01-14 129 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可以用这一行代码完成所有这些工作。

相关问题