【问题标题】:Comparing start time and end time比较开始时间和结束时间
【发布时间】:2016-09-24 05:06:23
【问题描述】:

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

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

问题是我正在为其编写预订脚本的商店是从晚上 17:00 到早上 1:00 营业的。因此,如果有人在 23:00 到 01:00 之间进行预订,则开始时间始终显示为较大,从而导致表单未通过验证。

有谁知道是否有解决方案,或者是否有验证器可以做到这一点。

注意:我只想比较时间,不想添加另一个日期字段。

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 更长时间

【问题讨论】:

  • 请展示您到目前为止所尝试的内容。
  • @ObjectManipulator 我进行了编辑,但到目前为止我尝试的代码只是一个简单的比较。
  • $('#timeto').val(); 的格式是什么?
  • @splash58 只是字符串
  • 您想使用 jquery 进行验证吗?还是 PHP?

标签: javascript php jquery validation


【解决方案1】:

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

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:00,我必须将 -1 设置为 -2。对吗?
  • 是的。你说的对。两个时间都必须在 00:00-23-59 范围内
  • 很高兴为您提供帮助。祝你好运!
【解决方案2】:
// 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
}

【讨论】:

  • 我尝试了第一个答案,它对我有用。但你的答案看起来很有趣。感谢您的帮助
【解决方案3】:

我认为您应该将时间设置为 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
}

【讨论】:

    【解决方案4】:

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

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

    【讨论】: