如何使用javascript进行总24小时验证并维护12小时格式?

如何使用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=[

在我的web应用程序表单中,我有两个名为startTime(关闭时间)的字段,它们在表格的每一行中重复。现在我必须验证从第一行的startTime到最后一行的closeTime的24小时(1440分钟)。但用户以12小时格式输入时间意味着,如果第一行的startTime是上午8:00,那么我必须检查到第二天上午8:00(我正在转换成分钟的每件事)。我尝试了几种方法,但无法校准am到pm/pm到am中缺少的校准。请帮助我。以下是我的代码(单击每行的第一列它将被调用)

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小时时钟。您似乎正在尝试这样做,同时也将其转换为分钟

现在,您有三个场景

  • 开始==结束-这将是0或24小时,目前您似乎无法满足这一要求
  • 开始>结束-一天在开始时间和结束时间之间滚动。因此,您需要计算(到一天结束的时间)+结束时间。因此,以分钟为单位,您将拥有
    1440-startMin+endMin
    。您似乎做得很正确
  • END>START-END比START晚,所以您只需要区别:
    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]);
    }