【问题标题】:ASP.NET MVC Datetime range [duplicate]ASP.NET MVC 日期时间范围 [重复]
【发布时间】:2014-03-09 18:54:34
【问题描述】:
我有一个日期时间输入字段,我想确保用户输入的日期至少比 Datetime.Now 晚 24 小时。我试过这个:
[Range(typeof(DateTime), DateTime.Now.ToString(), DateTime.Now.AddDays(1).ToString())]
public DateTime EndDate { get; set; }
但我收到编译器错误,因为值必须是常量。那我该怎么办?
【问题讨论】:
标签:
c#
asp.net
.net
asp.net-mvc
datetime
【解决方案1】:
您需要一个自定义验证属性,以便您进行比较:
[CustomValidation(typeof (Validator), "ValidateEndTimeRange")]
public DateTime EndDate { get; set; }
然后是你的实际验证者:
namespace MyMVCApp
{
public class Validator
{
public static ValidationResult ValidateEndTimeRange(DateTime endTime)
{
if(endTime.EndDate < DateTime.Now || endTime.EndDate > DateTime.Now.AddDays(1)){
return new ValidationResult("Your end date is outside of the acceptable range.");
}
return ValidationResult.Success;
}
}
}
【解决方案2】:
这是一些 JQuery 代码,我在其中获取两个日期字段之间的周数。输入格式为01/01/1990。这不完全是您所需要的,但如果您想验证客户端,它可以帮助您入门。
var startDate = $("#startDate").val();
var endDate = $("#endDate").val();
var startDateSplit = startDate.split("/");
var endDateSplit = endDate.split("/");
var stDate = new Date(startDateSplit[2], (startDateSplit[0] - (1)), startDateSplit[1]);
var enDate = new Date(endDateSplit[2], (endDateSplit[0] - (1)), endDateSplit[1]);
var startMonth = parseInt(startDateSplit[0]);
var endMonth = parseInt(endDateSplit[0]);
var daysBetween = (enDate.getTime() - (stDate.getTime())) / (1000 * 60 * 60 * 24); // time in days
var weeksBetween = Math.ceil(daysBetween / 7);