【问题标题】:Compare start time amd end time with jquery?用jquery比较开始时间和结束时间?
【发布时间】:2012-06-29 23:46:57
【问题描述】:

这里是代码

$(document).ready(function() {
    $('#st').change(function(){
        var st = $('#st').val(); // start time Format: '9:00 PM'
        var et = $('#et').val(); // end time   Format: '11:00 AM' 

        //how do i compare time
            if(st > et)
            {
               alert('end time always greater then start time');
            }
    });
});

如果我的时间范围如下

Start Time Range (listbox) =   12:00 AM To 11:59PM

End Time Range  (listbox)  =   12:00 AM To 11:59PM

那么如何验证开始时间小于结束时间或结束时间大于开始时间

Start-time < End-time  OR  End-time > St-time

考虑js代码中的时间格式,由于时间格式无法实现差异逻辑

Format: '9:00 AM'
Format: '5:00 PM'

【问题讨论】:

    标签: javascript jquery validation date time


    【解决方案1】:

    您必须将字符串转换为可以在时间方面进行比较的值。 Date.parse 派上用场,但您也需要传递一个日期。由于您只关心时间,因此请为两者使用相同的假日期。

    if(Date.parse("1-1-2000 " + st) > Date.parse("1-1-2000 " + et)) {
    

    【讨论】:

    • 3:00 AM to 2:30 PM 上失败,因为 300 大于 230
    • @Frank:请考虑切换对您有帮助的答案旁边的勾号。
    • 但它在这些条件下失败:[1] if StartTime 1:00 AM and EndTime 12:00AM/12:30AM 其他条件[2] if StartTime 1:00 AM and EndTime 12:00PM/12:30PM
    • 使用 firebug 然后在 jquery 中对其进行控制台并检查控制台输出:console.log(Date.parse("1-1-2000 " + st) + " " + Date.parse("1-1-2000 " + et)); 在第二种情况下,EndTime(et) 对象在控制台中返回 null
    • 另一个条件失败:[3] if StartTime 11:00 PM and EndTime 12:00 PM/12:30 PM 11PM(晚上)和 12PM/12:30PM(中午)
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      如果它们是select元素并且select元素中的顺序相同,则比较selectedIndex。无需解析日期。

      【讨论】:

        【解决方案4】:

        我在调查后得到了这个。
        时间格式采用12小时制24小时制的最佳做法。

        //start time
        var start_time = $("#start_time").val();
        
        //end time
        var end_time = $("#end_time").val();
        
        //convert both time into timestamp
        var stt = new Date("November 13, 2013 " + start_time);
        stt = stt.getTime();
        
        var endt = new Date("November 13, 2013 " + end_time);
        endt = endt.getTime();
        
        //by this you can see time stamp value in console via firebug
        console.log("Time1: "+ stt + " Time2: " + endt);
        
        if(stt > endt) {
            $("#start_time").after('<span class="error"><br>Start-time must be smaller then End-time.</span>');
            $("#end_time").after('<span class="error"><br>End-time must be bigger then Start-time.</span>');
                return false;
        }
        

        【讨论】:

        • 为什么要使用“2013 年 11 月 13 日”?
        • @Tarzan 例如,您可以使用任何日期和月份。
        【解决方案5】:

        您甚至可以尝试以下 jquery 规则:jQuery.validator.addMethod

           jQuery.validator.addMethod("timeValidator",
           function (value, element, params) {
           var val = new Date('1/1/1991' + ' ' + value);       
           var par = new Date('1/1/1991' + ' ' + $(params).val());
           if (!/Invalid|NaN/.test(new Date(val))) {
                   return new Date(val) > new Date(par);
               }
        
               return isNaN(val) && isNaN(par)
                   || (Number(val) > Number(par));
        }, 'End Time must be greater than Start Time.');
        

        你可以调用规则:

        $("#txtToTime").rules('add', { timeValidator: "#txtFromTime" });
        

        【讨论】:

          猜你喜欢
          • 2016-09-24
          • 1970-01-01
          • 2015-01-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-05
          相关资源
          最近更新 更多