使用javascript将文本框中的用户输入格式化为HH:mm:ss

使用javascript将文本框中的用户输入格式化为HH:mm:ss,javascript,asp.net,vb.net,Javascript,Asp.net,Vb.net,我在格式化和验证时间字段asp:textbox时遇到问题,只使用javascript,不使用JQuery。我希望用户在文本框中输入6个数字,如果它们有效,则插入冒号,但不允许用户输入无效数字。因此,如果插入的时间是235959,则在离开字段后或实时插入时,将格式设置为23:59:59。或者,如果输入的数字是无效的,比如输入25表示小时,用户甚至无法输入25中的5。我根本没有真正处理时间问题,我真的很挣扎 我必须承认,我以为这会更容易。我主要搜索在线论坛,只能实现部分解决方案,比如我可以插入冒号,

我在格式化和验证时间字段asp:textbox时遇到问题,只使用javascript,不使用JQuery。我希望用户在文本框中输入6个数字,如果它们有效,则插入冒号,但不允许用户输入无效数字。因此,如果插入的时间是235959,则在离开字段后或实时插入时,将格式设置为23:59:59。或者,如果输入的数字是无效的,比如输入25表示小时,用户甚至无法输入25中的5。我根本没有真正处理时间问题,我真的很挣扎

我必须承认,我以为这会更容易。我主要搜索在线论坛,只能实现部分解决方案,比如我可以插入冒号,但不能验证数字。示例:如果24输入为小时,则更改为00。我可以很容易地单独完成这项工作,但我想我正在努力让所有的部分协同工作。希望我能充分解释我自己。我还尝试了一系列的if语句来验证时间,但结果非常混乱

我在网上找到了冒号插入函数,但无法使其与数字验证一起使用

更新1:只是尝试将intFieldLength嵌套在intValidNum中,因此如果前两个数字小于24,则执行intFieldLength,但这不起作用。还在努力

Update2:删除intFieldLength变量只是为了我的可读性。添加了一些代码,试图强制用户输入正确的小时数,如果用户输入24作为小时数,它将转换为00。正在尝试执行与当前分钟和秒相似的操作

更新3:添加一个切片以选择mm和<60条件。尝试添加==60条件,以便如果mm为60,则返回00

<asp:TextBox ID="txtEndTime" runat="server" MaxLength="8" placeholder="HH:MM:SS" onkeypress="formatTime(this)" />
函数formatTimeInput{ intValidNum=timeInput.value; 如果intValidNum<24{ 如果intValidNum.length==2{ timeInput.value=timeInput.value+:; 返回false; } } 如果intValidNum==24{ 如果intValidNum.length==2{ timeInput.value=timeInput.value.length-2+0:; 返回false; } } 如果intValidNum>24{ 如果intValidNum.length==2{ timeInput.value=; 返回false; } } //这就是我难以瞄准目标的地方 //mm和ss,以添加条件,见上文hh。 //我用slice来帮助我。 //如果你们有任何建议/改进/更正,请告诉我。 如果intValidNum.length==5&&intValidNum.slice-2<60{ timeInput.value=timeInput.value+:; 返回false; } 如果intValidNum.length==5&&intValidNum.slice-2>60{ timeInput.value=timeInput.value.0,2+:; 返回false; } 如果intValidNum.length==5&&intValidNum.slice-2==60{ timeInput.value=timeInput.value.0,2+:00:; 返回false; } 如果intValidNum.length==8&&intValidNum.slice-2>60{ timeInput.value=timeInput.value.0,5+:; 返回false; } 如果intValidNum.length==8&&intValidNum.slice-2==60{ timeInput.value=timeInput.value.0,5+:00; 返回false; } }//结束函数
你可能已经看过了。但以防万一,我相信这就是你要找的

在操作过程中需要注意的一点是,您可能需要读取一个整数>-1,然后尝试此操作

String dateString = dateTextBox.Text;
String formats = "MM/dd/yyyy";
DateTime dateValue;

if (DateTime.TryParseExact(dateString, formats, 
                              new CultureInfo("en-US"), 
                              DateTimeStyles.None, 
                              out dateValue))
{
    // That means the value of the date is in the specified format..
}

不要忘记使用系统。全球化

看起来我已经回答了我的问题,但我希望得到建议/更正/增强

函数formatTimeInput{ intValidNum=timeInput.value; 如果intValidNum<24&&intValidNum.length==2{ timeInput.value=timeInput.value+:; 返回false; } 如果intValidNum==24&&intValidNum.length==2{ timeInput.value=timeInput.value.length-2+0:; 返回false; } 如果intValidNum>24&&intValidNum.length==2{ timeInput.value=; 返回false; } 如果intValidNum.length==5&&intValidNum.slice-2<60{ timeInput.value=timeInput.value+:; 返回false; } 如果intValidNum.length==5&&intValidNum.slice-2>60{ timeInput.value=timeInput.value.0,2+:; 返回false; } 如果intValidNum.length==5&&intValidNum.slice-2==60{ timeInput.value=timeInput.value.0,2+:00:; 返回false; } 如果intValidNum.length==8&&intValidNum.slice-2>60{ timeInput.value=timeInput.value.0,5+:; 返回false; } 如果intValidNum.length==8&&intValidNum.slice-2==60{ timeInput.value=timeInput.value.0,5+:00; 返回false; } }//结束函数
你试过使用TextMode=Time-format=HH:mm吗?我试过了,但我的asp:TextBox无法使用。我相信这是因为它被隐式定义为text maybe?谢谢,几天前我确实遇到过这个问题,但我的文本框中的TextMode=Time似乎给了我一个验证错误:该属性允许的值不包括“Time”。可能是因为我们正在使用asp.net 4.0。。。我想\啊 好啊我认为你关于asp.NET4.0的逻辑是有道理的。很抱歉,我不能解决你的问题。但希望它能帮助你走上正轨。一定要让我们知道你发现了什么!