如何使用javascript进行总24小时验证并维护12小时格式?
在我的web应用程序表单中,我有两个名为startTime(关闭时间)的字段,它们在表格的每一行中重复。现在我必须验证从第一行的startTime到最后一行的closeTime的24小时(1440分钟)。但用户以12小时格式输入时间意味着,如果第一行的startTime是上午8:00,那么我必须检查到第二天上午8:00(我正在转换成分钟的每件事)。我尝试了几种方法,但无法校准am到pm/pm到am中缺少的校准。请帮助我。以下是我的代码(单击每行的第一列它将被调用)如何使用javascript进行总24小时验证并维护12小时格式?,javascript,validation,Javascript,Validation,在我的web应用程序表单中,我有两个名为startTime(关闭时间)的字段,它们在表格的每一行中重复。现在我必须验证从第一行的startTime到最后一行的closeTime的24小时(1440分钟)。但用户以12小时格式输入时间意味着,如果第一行的startTime是上午8:00,那么我必须检查到第二天上午8:00(我正在转换成分钟的每件事)。我尝试了几种方法,但无法校准am到pm/pm到am中缺少的校准。请帮助我。以下是我的代码(单击每行的第一列它将被调用) var timeArray=[
var timeArray=[“”],timeArray1=[“”],timeNoon,closeNoon,temp=0,sumTime=0;
函数checkTime(){
var startTime,closeTime;
如果(rowIndex!=0){//rowIndex是当前行索引
startTime=document.getElementById(“logSheetDataTable”).rows[rowIndex-1]。单元格[j]。子节点[0]。tBodies[0]。行[0]。单元格[1]。子节点[0]。值;
closeTime=document.getElementById(“logSheetDataTable”).rows[rowIndex-1]。单元格[j]。子节点[0]。tBodies[0]。行[1]。单元格[1]。子节点[0]。值;
timeNoon=startTime.substring(6);//获取am或pm
startTime=startTime.substring(0,5);//到达时间08:00
timeArray=startTime.split(“:”);
closeNoon=closeTime.substring(6);//获取am或pm
closeTime1=closeTime.子串(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(StartMineAdmin){
温度=(1440开始分钟)+结束分钟;
}
sumTime=sumTime+温度;
警报(“总和:+sumTime”);
}
对于sumTime,我必须检查1440分钟。听起来你有一张桌子,看起来像这样:
START END
08:00 am 10:00 am
10:00 am 03:00 pm
03:00 pm 08:00 am
你是说你想确认从第一行的开始到最后一行的结束已经过去了24小时。如果这就是你想要做的,那么剩下的代码是用来做什么的
代码中的计算看起来像是将行中每个开始和结束之间的时间相加,然后将这些时间相加,可能是为了检查是否有24小时。您没有检查第一个开始+最后一个结束,那么这是否有效(三个8小时的批次==24)
当您拆分字符串时,总是使用前5个字符,并假设它们的格式为HH:MM
。这是否总是正确的(例如,您永远不会遇到0
前缀丢失的时间,因此您有8:00am
?您确定在时间之后、am/pm之前始终有正好1个空格吗?您确定在am/pm之后没有空格吗?所有这些都将影响字符串解析是否正常工作
在我看来,您提取数字的某些方法有点不可靠。例如:
startMin=parseInt((timeArray[0]*60))+parseInt(timeArray[1])+720;
仔细查看括号。您对(timeArray[0]*60)
的结果调用parseInt
。在尝试进行数学运算之前,可能应该调用它:
startMin=(parseInt(timeArray[0])*60)+parseInt(timeArray[1])+720;
这是对parseInt
的许多调用的常见问题,可能会导致一些意外问题
现在,看一下计算单行上每个开始和结束之间的时间差
如果时间是下午,加上12小时(720分钟)将其转换为24小时时钟。您似乎正在尝试这样做,同时也将其转换为分钟
现在,您有三个场景
1440-startMin+endMin
。您似乎做得很正确endMin-startMin
,同样,您似乎做得很正确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]);
}
也许这个工具会有所帮助
startMin=(parseInt(timeArray[0])*60)+parseInt(timeArray[1])+720;
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]);
}