im使用asp.net mvc c#,在我的例子中,我需要用户输入一个日期,我会检查该用户输入的日期是否介于从数据库读取的开始日期和结束日期之间,然后我会提交表单,否则会出现警报。
我的剃刀视图
@foreach (var obj in Model)
{
<tr data-myLoop="loop">
<td data-date="date"> @Html.DatePicker("myList[" + index + "].UserDate",
obj.InterviewDate) </td>
<td class="hidden" data-fromDate="fromDate">
@Html.Hidden("myList[" + index + "].FromDate", obj.FromDate)
</td>
<td class="hidden" data-toDate="toDate">
@Html.Hidden("myList[" + index + "].toDate", obj.toDate)
</td>
</tr>
index++;
}
在java脚本中:
$("[data-myLoop='loop']").each(function () {
var fromDate= $(this).find('[data-fromDate="fromDate"]').find('input[type="hidden"]').val();
var ToDate= $(this).find('[data-toDate="toDate"]').find('input[type="hidden"]').val();
var userDate = $(this).find('[data-date="date"]').datepicker('getDate');
if(userDate < fromDate || userDate > ToDate)
alert("not in range");
});
但这种比较并不总是能给出预期的结果。我认为是因为fromDate和toDate的类型是javascript中的字符串,而不是日期。
我该如何解决这个问题?
您可以先使用new Date(string)
构造函数将所有字符串日期转换为Date
对象,然后再进行比较,如:
var fromDate = new Date($(this).find('[data-fromDate="fromDate"]').find('input[type="hidden"]').val());
var ToDate = new Date($(this).find('[data-toDate="toDate"]').find('input[type="hidden"]').val());
var userDate = $(this).find('[data-date="date"]').datepicker('getDate');
if (userDate < fromDate || userDate > ToDate)
alert("not in range");
此外,.datepicker('getDate')
已经返回了一个Date
对象,因此我们不需要在这里再次将其转换为Date
对象。