如何使用 javascript 进行总共 24 小时验证维护 12 小时格式
How to do total 24 hrs validation maintaning 12 hrs format using javascript?
在我的网络应用程序表单中,我有两个字段称为开始时间,关闭时间,它们在表的每一行中重复。现在我必须验证从开始到第一行的关闭时间的 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 小时制。 您似乎正在尝试这样做,同时将其转换为分钟。
现在,您有三种方案。
- 开始 == 结束 - 这将是 0 小时或 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]);
}
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 正在验证8个真/假复选框或复选框中的2个
- 借助asp.net验证或java脚本对多个文本进行验证
- 调整窗口大小时,可拖动的对象会出现在容器外部
- jQuery自定义验证比较多个输入的序列
- 使用html中的外部javascript进行数据验证
- 如何使用jquery Validation验证Formspread
- jquery中的文本框验证
- 在验证和发送邮件后更改联系人表单的 html
- 代码不会验证
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 时间日志的javascript/jquery验证(5小时3米)
- 如何在 Jquery 或 JavaScript 中验证 24 小时格式化的时间
- jQuery 掩码插件中的时间验证 24 小时格式
- 如何使用 javascript 进行总共 24 小时验证维护 12 小时格式
- 如何使用正则表达式(正则表达式)验证 12 小时时间
- 使用PHP中的java脚本与AM/PM进行12小时的验证
- ExtJS:验证整小时时间
- 重新验证DIV'调整窗口大小时的尺寸
- 如何实现将新的Firebase自定义身份验证最大过期时间设置为1小时的用例