在我的网络应用程序窗体中有两个名为startTime,closeTime的字段,它们在表的每一行中重复。现在我要从第一行的startTime到最后一行的closeTime验证24小时(1440分钟)。但用户以12小时格式输入时间意味着如果第一行的startTime是08:00 am然后我要检查第二天的08:00 am(我转换成分钟的每一件事)。我试过几种方式但是无法上午到下午到下午失踪的细节请给我帮助。下面是我的代码(每行的第一列都会被调用)
var timeArray=[""],timeArray1=[""],timeNoon,closeNoon,temp=0,sumTime=0;
function checkTime(){
var startTime,closeTime;
if(rowIndex!=0){//rowIndex is current row index
startTime=document.getElementById("logSheetDataTable").rows[rowIndex-1].cells[j].childNodes[0].tBodies[0].rows[0].cells[1].childNodes[0].value;
closeTime = document.getElementById("logSheetDataTable").rows[rowIndex-1].cells[j].childNodes[0].tBodies[0].rows[1].cells[1].childNodes[0].value;
timeNoon=startTime.substring(6);//to get am or pm
startTime = startTime.substring(0,5);//to get tome 08:00
timeArray = startTime.split(":");
closeNoon=closeTime.substring(6);//to get am or pm
closeTime1=closeTime.substring(0,5);
timeArray1=closeTime1.split(":");
if(timeNoon.toLowerCase()=="pm"){
startMin=parseInt((timeArray[0]*60))+parseInt(timeArray[1])+720;
}else if(timeNoon.toLowerCase()=="am"){
startMin=parseInt((timeArray[0]*60))+parseInt(timeArray[1]);
}
if(closeNoon.toLowerCase()=="pm"){
endMin=parseInt((timeArray1[0]*60))+parseInt(timeArray1[1]+720);
}else if(closeNoon.toLowerCase()=="am"){
endMin=parseInt((timeArray1[0]*60))+parseInt(timeArray1[1]);
}
if(startMin<endMin){
temp=endMin-startMin;
}else if(startMin>endMin){
temp=(1440-startMin)+endMin;
}
sumTime=sumTime+temp;
alert("sum: "+sumTime);
}
为sumTime我要检查1440分钟。
答案 0 :(得分:1)
听起来你有一张看起来像这样的表:
START END
08:00 am 10:00 am
10:00 am 03:00 pm
03:00 pm 08:00 am
而且你说要验证从第一行的START和最后一行的END已经过了24小时。如果那是 all 你想要做的所有其余代码是什么?
你在代码中得到的计算看起来就像你在行上的每个START和END之间加起来的时间,然后将它们相加,大概是为了检查你是否需要24小时。你没有检查第一个START +最后一个END,所以这是有效的(三个8小时= = 24)?
START END
01:00 am 09:00 am
01:00 am 09:00 am
01:00 am 09:00 am
当你分割出字符串时,你总是取前5个字符并假设它们的格式为HH:MM
。这总是正确的(你永远不会遇到例如缺少0
前缀的时间,所以你有8:00am
吗?你确定在这之后总会有1个空格吗?在am / pm之前?你确定在am / pm之后什么都没有?所有这些都会影响你的字符串解析是否正常工作......
你提取数字的一些方法对我来说有点狡猾。例如:
startMin=parseInt((timeArray[0]*60))+parseInt(timeArray[1])+720;
仔细看看括号。您在parseInt
的结果上调用了(timeArray[0]*60)
。在您尝试进行数学运算之前,可能应该调用它:
startMin=(parseInt(timeArray[0])*60)+parseInt(timeArray[1])+720;
这是您拨打parseInt
的很多电话的常见问题,可能会导致一些意外问题......
现在,查看单行上每个开始和结束之间时差的计算......
如果时间是下午,请添加12小时(720分钟)将其转换为24小时制。你似乎试图这样做,你也同时把它转换成几分钟。
现在,您有三种情况。
1440 - startMin + endMin
。你似乎正确地这样做了...... endMin - startMin
,您似乎也正确地执行此操作。因此,您的代码肯定存在问题。我有一点fiddle而且我们的问题基本上就是你的问题。因为你把它们放在了错误的地方,你的数字有时被用作字符串+数字其他字符串,所以有时候不是添加,你会得到连接的数字串联......
相关修正是:
if(timeNoon.toLowerCase()=="pm"){
startMin=(parseInt(timeArray[0])*60)+parseInt(timeArray[1])+720;
}else if(timeNoon.toLowerCase()=="am"){
startMin=(parseInt(timeArray[0])*60)+parseInt(timeArray[1]);
}
if(closeNoon.toLowerCase()=="pm"){
endMin=(parseInt(timeArray1[0])*60)+parseInt(timeArray1[1])+720;
}else if(closeNoon.toLowerCase()=="am"){
endMin=(parseInt(timeArray1[0])*60)+parseInt(timeArray1[1]);
}