2010-07-09 58 views
2

我似乎無法得到這個權利,我可以得到它來捕捉過去的日期,但不會在將來的日期返回true。我只需要驗證我的表單的信用卡到期日日期在未來,這是行不通的,有什麼想法?日期必須採用MM/YYYY格式,並在它們之間加「/」。jQuery驗證信用卡的過期日期作爲將來的日期

$.validator.addMethod(
"FutureDate", 
function(value, element) { 
    var startdatevalue = (.getMonth/.getYear); 
    return Date.parse(startdatevalue) < Date.parse($("#ExpirationDate").val()); 
}, 
    "End Date should be greater than Start Date." 
); 

回答

1

你實際上並沒有得到它來捕捉過去的日期。如果您將像這樣的日期「11/2010」傳遞給您的Date.parse(),它將返回NaN(或不是一個數字),這相當於返回false

嘗試這樣做是爲了看看我的意思:

alert(Date.parse('11/2010')); 

如果添加的天數時,它應該工作。例如:

var startdatevalue = '11/1/2010'; 

當然,此示例使用硬編碼日期。如果這些值存儲爲11/2010,則可以嘗試如下所示:

// Get the index of the "/" 
var separatorIndex = value.indexOf('/'); 

    // Add "/1" before the separatorIndex so we end up with MM/1/YYYY 
var startDate = value.substr(0, separatorIndex) + '/1' + value.substr(separatorIndex); 

    // Do the same with the expiration date 
var expDate = $("#ExpirationDate").val(); 
separatorIndex = expDate.indexOf('/'); 
expDate = expDate.substr(0, separatorIndex) + '/1' + expDate.substr(separatorIndex); 

    // Return the comparison 
return Date.parse(startDate) < Date.parse(expDate); 
+0

@Patrick,我現在正在測試上述內容。我不知道爲什麼我需要在日期中添加「/ 1」。日期只能輸入爲MM/YYYY,而我只需要驗證輸入的MM/YYYY是否在當前MM/YYYY之前 – 2010-07-12 16:31:16

+0

@Dirty - 原因是Date.parse()不接受「 MM/YYYY'格式,所以我們只是添加一個數字來讓它開心。這只是使用'Date.parse()'使你想要的格式工作的臨時修復。它不會最終改變輸入值。 – user113716 2010-07-12 16:55:44

+0

@Patrick - 有趣......假設你輸入了07/2015作爲日期,(我使用了上面的代碼並停留在alert(startDate);而alert(expDate);)兩個日期都是一樣的,除了實例,startDate val = 7/1/2015和expDate = 07/2015。它返回false,它似乎沒有比較當前(今天)的日期和exp。日期,即使返回Date.parse ....似乎是正確的 – 2010-07-12 17:03:10