使用JavaScript将文本输入中的用户格式设置为HH:mm:ss

时间:2019-04-22 14:17:12

标签: javascript asp.net vb.net

我在仅使用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" />

3 个答案:

答案 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" />