我在仅使用JavaScript而不使用JQuery格式化和验证时间字段(asp:textbox)时遇到了麻烦。我希望用户在文本框中输入6个数字,如果它们有效,则要插入冒号,但不允许用户输入无效的数字。因此,如果插入的时间是235959,则在离开该字段后或实时地将其格式化为23:59:59。或者,如果输入的数字无效(例如输入25表示一个小时),则用户甚至无法输入25中的5。我根本没有真正处理时间,而且真的很挣扎。
我必须承认,我认为这样会更容易。我大部分时间在网上搜索论坛,并且只能实现部分解决方案,例如我可以插入冒号,但也无法验证数字。示例:如果将小时输入为24,则更改为00。我可以轻松地单独进行此操作,但是我想让所有部分协同工作很困难。希望我能充分解释自己。我还尝试了一系列if语句来验证时间,但这确实很麻烦。
我在网上找到了此冒号插入功能,但无法使其与数字验证一起使用。
Update1:只是尝试将intFieldLength嵌套在intValidNum中,因此,如果前两个数字小于24,则执行intFieldLength,但这是行不通的。仍在尝试!
Update2:仅为我的可读性删除了intFieldLength var。添加了一些代码来尝试强制用户输入正确的小时,并且如果用户输入24作为小时,它将转换为00。尝试类似于当前的分钟和秒...
Update3:添加了一个切片以选择mm和“ <60”条件。尝试添加“ == 60”条件,以便如果mm为60,则返回00。
<asp:TextBox ID="txtEndTime" runat="server" MaxLength="8" placeholder="HH:MM:SS" onkeypress="formatTime(this)" />
function formatTime(timeInput) {
intValidNum = timeInput.value;
if (intValidNum < 24) {
if (intValidNum.length == 2) {
timeInput.value = timeInput.value + ":";
return false;
}
}
if (intValidNum == 24) {
if (intValidNum.length == 2) {
timeInput.value = timeInput.value.length - 2 + "0:";
return false;
}
}
if (intValidNum > 24) {
if (intValidNum.length == 2) {
timeInput.value = "";
return false;
}
}
//Here is where I had trouble targeting the
//mm and ss in order to add conditions (see hh above).
//I used slice to assist me.
//Please let me know if any of you have suggestions/enhancements/corrections.
if (intValidNum.length == 5 && intValidNum.slice(-2) < 60) {
timeInput.value = timeInput.value + ":";
return false;
}
if (intValidNum.length == 5 && intValidNum.slice(-2) > 60) {
timeInput.value = timeInput.value.slice(0, 2) + ":";
return false;
}
if (intValidNum.length == 5 && intValidNum.slice(-2) == 60) {
timeInput.value = timeInput.value.slice(0, 2) + ":00:";
return false;
}
if (intValidNum.length == 8 && intValidNum.slice(-2) > 60) {
timeInput.value = timeInput.value.slice(0, 5) + ":";
return false;
}
if (intValidNum.length == 8 && intValidNum.slice(-2) == 60) {
timeInput.value = timeInput.value.slice(0, 5) + ":00";
return false;
}
} //end function
<input id="txtStartTime" type="text" placeholder="HH:MM:SS" onkeypress="formatTime(this)" MaxLength="8" />
答案 0 :(得分:0)
您可能已经看到了。但是以防万一,我相信这就是您想要的。
Enter IN TIME and OUT TIME in HH:MM format
要注意的一件事是,您可能需要读取整数> -1和<240000,将其传递给字符串,然后将其切成所需的字符串。 / p>
答案 1 :(得分:0)
尝试一下
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..
}
不要忘记使用System.Globalization;
答案 2 :(得分:0)
好像我回答了我的问题,但希望提出建议/更正/改进!
function formatTime(timeInput) {
intValidNum = timeInput.value;
if (intValidNum < 24 && intValidNum.length == 2) {
timeInput.value = timeInput.value + ":";
return false;
}
if (intValidNum == 24 && intValidNum.length == 2) {
timeInput.value = timeInput.value.length - 2 + "0:";
return false;
}
if (intValidNum > 24 && intValidNum.length == 2) {
timeInput.value = "";
return false;
}
if (intValidNum.length == 5 && intValidNum.slice(-2) < 60) {
timeInput.value = timeInput.value + ":";
return false;
}
if (intValidNum.length == 5 && intValidNum.slice(-2) > 60) {
timeInput.value = timeInput.value.slice(0, 2) + ":";
return false;
}
if (intValidNum.length == 5 && intValidNum.slice(-2) == 60) {
timeInput.value = timeInput.value.slice(0, 2) + ":00:";
return false;
}
if (intValidNum.length == 8 && intValidNum.slice(-2) > 60) {
timeInput.value = timeInput.value.slice(0, 5) + ":";
return false;
}
if (intValidNum.length == 8 && intValidNum.slice(-2) == 60) {
timeInput.value = timeInput.value.slice(0, 5) + ":00";
return false;
}
} //end function
<input id="txtStartTime" type="text" placeholder="HH:MM:SS" onkeypress="formatTime(this)" MaxLength="8" />