比较开始时间和结束时间

时间:2016-05-26 09:24:13

标签: javascript php jquery validation

我知道这里有很多关于这个问题的问题,但没有人关于我的问题。

此脚本适用于用户选择日期,开始和结束时间并进行预订的预订。 我有一个带有日期选择器输入字段和两个时间选择器输入字段的表单,一个用于开始时间,一个用于结束时间。

问题是我写的预订脚本的商店从17:00晚上到01:00早上开放。因此,如果有人在23:00到01:00之间预订,则开始时间总是显示为更大,这会导致表单未经过验证。

有没有人知道是否有解决方案,或者是否有可以执行此操作的验证器。

注意:我只想比较时间而我不想添加其他日期字段。

enter image description here

var timeto=$('#timeto').val();
var timefrom=$('#timefrom').val();
        if(timefrom>timeto){
            alert('start time should be smaller')
        }

因此,如果time from为23:00且time to为00:00,则会显示警报,但实际上00:00的时间比23:00更长

4 个答案:

答案 0 :(得分:5)

创建日期对象时只需减去一小时。

var timefrom = new Date();
temp = $('#timefrom').val().split(":");
timefrom.setHours((parseInt(temp[0]) - 1 + 24) % 24);
timefrom.setMinutes(parseInt(temp[1]));

var timeto = new Date();
temp = $('#timeto').val().split(":");
timeto.setHours((parseInt(temp[0]) - 1 + 24) % 24);
timeto.setMinutes(parseInt(temp[1]));

if (timeto < timefrom){
    alert('start time should be smaller than end time!');
}

答案 1 :(得分:1)

// get the times as strings   
start_string = $('#timefrom').val();    
end_string = $('#timeto').val();

// define an arbitrary start time since you are only comparing hours
start_time = new Date("May 26, 2016 " + start_string);

// define the end time as the same date + end time
end_time = new Date("May 26, 2016 " + end_string);


// now we need to check if your end time is beyond midnight, if so, we need to add one day to end_time
var stay_length = end_time.getTime() - start_time.getTime();
if (stay_length < 0 {
    // end time is beyond midnight, re-calculate end_time with adding one to the day
    end_time = new Date("May 27, 2016 " + end_string);
    stay_length = end_time.getTime() - start_time.getTime();
} elseif (stay_length > 24 {
    // The user probably reversed the times, so show an alert
    alert("The start time must be before the end time")
} else {
    // The user most likely put in correct times
}

答案 2 :(得分:0)

由于您的时间存储为字符串,您可以尝试将它们解析为日期并进行比较;

var timeto=$('#timeto').val();
var timefrom=$('#timefrom').val();
     if(Date.parse(timefrom) > Date.parse(timeto) > true){
         alert('start time should be smaller')
     }

答案 3 :(得分:0)

我认为你应该把时间作为DateTime比较容易。请试试这个:

var end_time=$('#timeto').val();
var start_time =$('#timefrom').val();

var stt = new Date("May 26, 2016 " + start_time);
stt = stt.getTime();

var endt= new Date("May 26, 2016 " + end_time);
endt = endt.getTime();
if(stt >endt){
   //do something
}