有效时间的时刻javascript库和javascript日期用法

时间:2013-05-20 09:33:57

标签: javascript validation date time momentjs

我目前正在编写一个ASP.NET应用程序(在SharePoint中),它要求对表单中的字段执行验证。我目前正在研究验证日期和时间的方法,包括比较两个日期时间(小于/大于)和验证格式。

我最初看过datejs但是自2007年以来一直没有更新。最后一个版本似乎缺少两个根据文档的功能 - isAfter和isBefore - 所以我把注意力转向使用{ {3}}。

我目前有一个开始日期,开始时间,结束日期和结束时间文本字段 - 所有这些都是必需的,因此我没有Start DateTime和EndDateTime - 用户输入的内容。我也使用jQuery日期选择器和moment javascript library来选择日期和时间。

我遇到的一个问题是在时间字段中输入时间时,我可以输入以下内容:

11:90 - 这将调整为11:59。

11:100 - 无法调整。

这是我将值提供给我的自定义验证javascript函数以验证时间的地方。这是使用以下代码完成的:

function ValidateTimeFormat(objSource, objArgs) {
    var strToCompare = objArgs.Value;
    var timeFormat = 'HH:mm';
    var expectedEndDateObj = moment(strToCompare, timeFormat);
    objArgs.IsValid = expectedEndDateObj.isValid();
} 

使用ASP.NET代码段:

<div class="label-div">
    <asp:Label ID="StartTimeLabel" runat="server" Text="Actual Start Time:"></asp:Label>
    <asp:RequiredFieldValidator ID="ActualStartTimeRequiredValidator" 
        runat="server" 
        ControlToValidate="StartTimeTextBox"
        ErrorMessage="Actual start time is required field" 
        Display="Dynamic">*</asp:RequiredFieldValidator>
    <asp:CustomValidator ID="ActualStartTimeCustomValidator" 
        runat="server"
        ControlToValidate="StartTimeTextBox"
        ErrorMessage="Actual start time format is not correct" 
        Display="Dynamic" 
        ClientValidationFunction="ValidateTimeFormat">*</asp:CustomValidator>
</div>
<asp:TextBox ID="StartTimeTextBox" runat="server" ></asp:TextBox></li>

根据momentjs(如果我删除了jQuery Time Picker):

  • 11:90无效。
  • 11:100有效。

我没有看过任何关于momentjs的论坛或支持,所以我想在这里问。有许多方法可以验证时间,包括在您自己的自定义验证例程中使用正则表达式 - 但我现在不想重新发明轮子。我想要一个很好的库来实现它。

引用要验证的momentjs文档jquery-ui-timepicker-addon

moment()函数非常灵活,允许在解析输入时溢出。例如,moment("2012-01-40", "YYYY-MM-DD")会将日期值溢出到月份中,使得2月9日的实际时刻(1月31天+ 2月9天)。

这在获取一年中的第150天或一天中的第500分钟时非常有用,但是,在尝试解析用户输入时可能会出现问题。

时刻#isValid被添加以检查片刻输入是否确实是有效日期。

鉴于该库是Date的包装器,我不确定这是一个javascript问题还是片刻 - 或者实际上是我自己!

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这看起来像是一个问题。从2.3.0开始,您可以尝试使用此处提到的严格解析 - http://momentjs.com/docs/#/parsing/string-format/

但是我仍然觉得片刻解析器认为“01:k0 A”的时间对“hh:mm A”有效