C# 如何比较当天的开始和结束时间选择

C# 如何比较当天的开始和结束时间选择,c#,jquery,validation,time,C#,Jquery,Validation,Time,我有一个表单,其中有一个日期文本字段和两个下拉字段,开始时间和结束时间,时间间隔为30分钟(从8:00:00到22:30:00)。此表单在fullcalendar.js插件的月视图上发生DayClick事件后启动 StartTime和EndTime下拉列表的TimeHelper.cs代码为: public class TimeHelper { public DateTime Start { get; private set; } public DateTime End {

我有一个表单,其中有一个日期文本字段和两个下拉字段,开始时间和结束时间,时间间隔为30分钟(从8:00:00到22:30:00)。此表单在fullcalendar.js插件的月视图上发生DayClick事件后启动

StartTime和EndTime下拉列表的TimeHelper.cs代码为:

    public class TimeHelper
{
    public DateTime Start { get; private set; }
    public DateTime End { get; private set; }

public static List<TimeSpan> TimeSpansInRange(TimeSpan start, TimeSpan end, TimeSpan interval)
    {
        List<TimeSpan> timeSpans = new List<TimeSpan>();
        while (start.Add(interval) <= end)
        {
            timeSpans.Add(start);
            start = start.Add(interval);
        }
        return timeSpans;
    }

    public static List<TimeSpan> PossibleTimeSpansInDay()
    {
        return TimeSpansInRange(new TimeSpan(8, 0, 0), new TimeSpan(22, 30, 0), new TimeSpan(0, 30, 0));
    }
公共类TimeHelper
{
公共日期时间开始{get;private set;}
公共日期时间结束{get;private set;}
公共静态列表TimeSpaniRange(TimeSpan开始、TimeSpan结束、TimeSpan间隔)
{
列表时间跨度=新列表();
虽然(start.Add(interval)OK,但我不是C#或ASP.NET主机,但假设您的模板代码类似于下面的代码,那么第一步是编辑StartTimes、EndTimes和Date函数,以便它们只返回有效范围内的时间和日期以及当前时间之后的时间和日期,如下所示

public class TimeHelper
{
    public DateTime Start { get; private set; }
    public DateTime End { get; private set; }

    public static List<TimeSpan> TimeSpansInRange(TimeSpan start, TimeSpan end, TimeSpan interval)
    {
        List<TimeSpan> timeSpans = new List<TimeSpan>();
        TimeSpan now = DateTime.Now.TimeOfDay;
        while (start.Add(interval) <= end)
        {
            if(start.Add(interval) > now){
                timeSpans.Add(start);
            }
            start = start.Add(interval);
        }
        return timeSpans;
    }

    public static List<TimeSpan> PossibleTimeSpansInDay()
    {
        return TimeSpansInRange(new TimeSpan(8, 0, 0), new TimeSpan(22, 30, 0), new TimeSpan(0, 30, 0));
    }
}
现在,这段代码做了一些假设,即start和end select字段以及表单分别有名为start\u id、end\u id和form\u id的id。checkTimes函数中的代码部分应该更改为它们的实际id。我还假设时间是00:00:00格式,如果不是这样,只需更改v设置时间函数中re的值。我希望这对您有所帮助。

好的,我不是C#或ASP.NET主机,但假设您的模板代码类似于下面的内容,那么第一步是编辑StartTimes、EndTimes和Date函数,以便它们只返回有效范围内的时间和日期D在当前时间之后,如下所示

public class TimeHelper
{
    public DateTime Start { get; private set; }
    public DateTime End { get; private set; }

    public static List<TimeSpan> TimeSpansInRange(TimeSpan start, TimeSpan end, TimeSpan interval)
    {
        List<TimeSpan> timeSpans = new List<TimeSpan>();
        TimeSpan now = DateTime.Now.TimeOfDay;
        while (start.Add(interval) <= end)
        {
            if(start.Add(interval) > now){
                timeSpans.Add(start);
            }
            start = start.Add(interval);
        }
        return timeSpans;
    }

    public static List<TimeSpan> PossibleTimeSpansInDay()
    {
        return TimeSpansInRange(new TimeSpan(8, 0, 0), new TimeSpan(22, 30, 0), new TimeSpan(0, 30, 0));
    }
}

现在,这段代码做了一些假设,即start和end select字段以及表单分别有名为start\u id、end\u id和form\u id的id。checkTimes函数中的代码部分应该更改为它们的实际id。我还假设时间是00:00:00格式,如果不是这样,只需更改v设置时间函数中re的值(视情况而定)。我希望这对您有所帮助。

您的答案中上面的模板代码看起来与我在表单中的模板代码完全相同。但我没有下拉列表的ID,因为我使用as.NET MVC Timehelper.cs设置开始时间和结束时间下拉列表。我编辑了原始问题以包含此代码。time是00:00:00格式。我在表单的代码中使用了jquery“Submit”函数。我想如果用户选择的时间小于现在的时间,可以为开始时间列表编写“警报”,类似于您之前为我建议的时间。我编写了此代码,但它不起作用:$(“#StartTimes”)。更改(函数(){if($(this)<label for="Date">Date</label> <%= Html.TextBox("Date", Model.Request.Date, new { @class="required" })%> <label for="Start">StartTime</label> <%=Html.DropDownList("Start",Model.Request.StartTimes, { new{@class="required"})%> <%= Html.ValidationMessage("Start", "")%> <label for="End">EndTime</label> <%=Html.DropDownList("End",Model.Request.EndTimes, { new{@class="required"})%> <%= Html.ValidationMessage("End", "")%>
<input type="submit" value="Submit" />
<button onclick="checkTimes" />
function checkTimes(){
    start = setTime(new Date(), $('#start_id'));
    end = setTime(new Date(), $('#end_id'));
    if(end > start){
        $('form_id').submit();
    } else {
        alert("End time must be greater then start time");
    }
}

function setTime(time, field){
    re = /^(\d{1,2}):(\d{2})(:00)$/;
    if(regs = field.value.match(re)) {
        time.setHours(regs[1], regs[2], 0, 0);
    }
    return time;
}