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

How to do total 24 hrs validation maintaning 12 hrs format using javascript?

本文关键字:小时 验证 维护 格式 javascript 何使用      更新时间:2023-09-26

在我的网络应用程序表单中,我有两个字段称为开始时间,关闭时间,它们在表的每一行中重复。现在我必须验证从开始到第一行的关闭时间的 24 小时(1440 分钟)最后一行的时间。但是用户以 12 小时格式输入时间意味着如果第一行的开始时间是上午 08:00,那么我必须检查到第二天的 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);
}

对于总时间,我必须检查 1440 分钟。

听起来你有一个看起来像这样的表:

START      END
08:00 am    10:00 am
10:00 am    03:00 pm
03:00 pm    08:00 am

你说你想验证从第一行的 START 和最后一行的 END 已经过去了 24 小时。 如果这就是您想要执行的全部操作,那么其余代码的用途是什么?

您在代码中获得的计算看起来像是您将行上每个 START 和 END 之间的时间相加,然后将它们相加,大概是为了检查您是否有 24 小时。 您没有检查第一个开始 + 最后一个结束,所以这是否有效(三批 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 个空格吗? 你确定上午/下午之后什么都没有吗? 所有这些都会影响您的字符串解析是否正常工作......

你提取数字的一些方法在我看来有点狡猾。 例如:

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

现在,您有三种方案。

  1. 开始 == 结束 - 这将是 0 小时或 24 小时,目前您似乎不满足这一点。
  2. 开始>结束 - 一天在开始时间和结束时间之间滚动。 因此,您需要计算(到一天结束的时间)+结束时间。 所以在几分钟内,你会有1440 - startMin + endMin. 你似乎做对了...
  3. 结束>开始 - 结束晚于开始,所以你只需要区别: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]);
}