2013-12-03 17 views
0

我如何可以驗證,如果如果用戶有時間幀的列表來選擇選定的時間是正確的,我想確認所選的時間幀具有以下標準:現在之前不jQuery驗證選定的時間是不是在過去,使用當前時間前至少30個javascript

1)沒有過去(換言之)
2)選擇的時間必須大於當前時間大於至少30分鐘

Here is the HTML snippet from my form: 
<select id="callBackTime" tabindex="9" name="callBackTime"> 
<option value="8:00 AM - 8:30 AM">8:00 AM - 8:30 AM</option> 
<option value="8:30 AM - 9:00 AM">8:30 AM - 9:00 AM</option> 
<option value="9:00 AM - 9:30 AM">9:00 AM - 9:30 AM</option> 
<option value="9:30 AM - 10:00 AM">9:30 AM - 10:00 AM</option> 
<option value="10:00 AM - 10:30 AM">10:00 AM - 10:30 AM</option> 
</select> 

我使用jQuery.validator.addMethod()添加我自己的規則,這是我到目前爲止:

Here is my JQuery Custom rule Validation so far: 
$.validator.addMethod (
    "timeToCall", 
    function(value, element) { 
    var timeSelected = $('#callBackTime').val(); 
    var today = new Date(); 
    var currentTime = today.getHours() + ':' + today.getMinutes(); 
    return Date.parse(timeSelected) > Date.parse(currentTime); 
    }, 
    "*Please select a later time." 
); 

Here is the code to trigger the validation: 
    $('#submit').click(function(e) { 
    $("#supportCallBackForm").validate({ 

     rules: { 
     callBackTime: { timeToCall : true } 
     }, 

    submitHandler: function(form) { 
    // do other things for a valid form 
    submitCallBackSupportRequest(); 
    return false; 
    } 
    }); 
}); 

我想我的自定義.validator方法是我最需要幫助的地方。我不知道如何正確比較用戶選擇的內容和當前時間,此外,所選時間必須至少大於NOW的30分鐘。任何幫助不勝感激。

回答

0

我會建議一些更改。 首先,如果你可以讓你的選擇如下當然

<select id="callBackTime" tabindex="9" name="callBackTime"> 
    <option value="20:00 - 20:30">8:00 PM - 8:30 PM</option> 
    <option value="20:30 - 21:00">8:30 PM - 9:00 PM</option> 
    .... 
    .... 
    <option value="08:30 - 09:00">8:30 AM - 9:00 AM</option> 
</select> 

通知,這兩個數字爲單數的小時數

這將使它更容易解析。

在你驗證你可以做這樣的

$.validator.addMethod (
    "timeToCall", 
    function(value, element) { 
    var now = new date(); 
    var timeSelected = $('#callBackTime').val(); 
    var startHour = timeSelected.substr(0,2); 
    var startMin = timeSelected.substr(3,2); 
    var endHour = timeSelected.substr(9,2); 
    var endMin = timeSelected.substr(12,2); 
    // depending on whether you are interested in the beginning of the timespan or the end 
    var startTimeInMinutes = (startHour * 60) + startMin; 
    var targetTimeInMinutes = (now.getHours() * 60) + now.getMinutes(); 
    return startTimeInMinutes + 30 > targetTimeInMinutes; 
}, 
    "*Please select a later time." 
); 

我還沒有實際運行該代碼,所以我肯定會檢查結果,不管你有你乘他們以前是否來解析字符串中的子串*得到執行+

我有點吮吸那些東西。

祝你好運,讓我知道如果你需要更多。

0

看一看moment.js。你可以得到當前的時間加30分鐘此方式:

var smallestAllowedTime = moment().add("m",30); 

然後,如果用戶選擇8:30 - 9:00如果你分析出830的「地板」,「小時和分鐘」爲通話時間,你可以很容易地做比較:

var hour = 8; // parsed from selection 
var minute = 30; // parsed from selection 
var userSelectedTime = moment().set("hour",hour).set("minute",minute); 
return userSelectedTime.isAfter(smallestAllowedTime); 

這還沒有考慮am/pm或時區。

相關問題