我目前正在编写一个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):
我没有看过任何关于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问题还是片刻 - 或者实际上是我自己!
有什么想法吗?
答案 0 :(得分:0)
这看起来像是一个问题。从2.3.0开始,您可以尝试使用此处提到的严格解析 - http://momentjs.com/docs/#/parsing/string-format/
但是我仍然觉得片刻解析器认为“01:k0 A”的时间对“hh:mm A”有效