2013-07-02 72 views
-1

我想檢查一個給定的日期是否比使用JavaScript + jQuery的其他日期少。日期驗證失敗

但是,如果檢查比指定日期少一天的日期,則不符合條件。

這是我的代碼;

$('#payment_date').change(function(){ 
    payment_date_1  = String($("#payment_date").val()); 
    s_date_1  = String($("#s_date").text()); 

    payment_date  = new Date(payment_date_1); 
    s_date   = new Date(s_date_1); 

    if(payment_date<s_date){ 
     alert("please enter a correct date"); 
     $("#payment_date").val(""); 
    } 
}); 

例如:當s_date == '2013-07-02'payment_date == '2013-07-01'狀態正在恢復false而非true

我的HTML:

<span style="display:none;" id="s_date">2013-07-02</span> 
<input type="text" value="" name="payment_data_info[payment_date]" id="payment_date" class="hasDatepicker" readonly="readonly"> 

注意;我檢查了兩個日期是否有效,兩個日期都返回了有效日期,並且條件對其他實例完全適用

我剛剛發現了原因;我使用jQuery的日期選擇器。日期小於等於2013-07-10返回的有效日期和日期小於2013-07-10,大於2013-06-30返回無效日期。任何想法爲什麼?

+0

它可以幫助來發表您的HTML。 –

+0

日期處理和翻譯的很好的lib http://momentjs.com/ –

回答

-1

請創建日期對象,然後選中所有的

var first = new Date($("#s_date").text()); 
var second = new Date($("#s_date_1").text()); 

if(first.getTime() < second.getTime()) { 
    // code 
} 
+0

@ downvoter,請注意評論。 –

+0

即時檢查日期不是時間。使用var沒有區別 – guitarlass

+0

@guitarlass好的,沒有問題。請檢查。 –

1

首先,如果變量聲明的問題,不是檢查字符串解析返回你希望的日期。畢竟,s_date和payment_date可能無效?

我用直接比較(不知道爲什麼)也顯示了困難,所以我使用valueOf函數來獲取用於比較的值。

+0

+1你發現她的問題顯然日期得不到正確解析...在日期使用比較應該工作;) –

-1

你可以做這樣的事情。

var payment_date_1  = $("#payment_date").val(); 
var s_date_1   = $("#s_date").text(); or $("#s_date").val(); 
// IF s_date_1 is a input field then you have to use .val() 

對於類型轉換String。你可以做

var payment_date_1  = $("#payment_date").val().toString(); 
var s_date_1   = $("#s_date").val().toString(); 
+0

鑄造的種類並不重要 –

0

確保其工作;)

http://jsfiddle.net/4MQkK/

payment_date_1 = "2013-07-01"; 
s_date_1  = "2013-07-02"; 

payment_date = new Date(payment_date_1); 
s_date   = new Date(s_date_1); 

if(payment_date < s_date){ 
    alert(payment_date + "is lower than " + s_date); 
} 

檢查payment_date_1和s_date_1的值,其中至少一個無法解析正確

0

試試這個,我希望這會有所幫助。

$('#payment_date').change(function(){ 
     var payment_date_1 = $("#payment_date").val(); //add var 
     var s_date_1 = $("#s_date").text(); //add var 

     var payment_date  = new Date(payment_date_1); 
     var s_date   = new Date(s_date_1); 

     if((payment_date.valueOf())<(s_date.valueOf())){ 
      alert("please enter a correct date"); 
      $("#payment_date").val(""); 
     } 
    }); 
+0

終於有人誰理解我的問題。謝謝,但它仍然返回假。 :( – guitarlass

+0

與我的結局正常工作 –

+0

嘿,現在$(「#payment_date」)。val()返回無效日期。任何想法爲什麼?如何將它轉換爲正確的日期? – guitarlass

0

2個可能的原因:

1)如日期被稱爲具有一個以上參數的構造, 如果值大於它們的邏輯範圍更大(例如13設置爲月份值或分鐘值爲70),相鄰值將被調整。例如。新的Date(2013,13,1)等同於新的日期(2014,1,1),https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

您的日期格式爲 'DD/MM/YYYY',但新的Date()使用格式YYYY/dd/mm所以2013-06-30:30是月,即30個月以上,然後06/01/2013 - > 06/06/2015 您需要更改格式。例如:

var myDate = "2013/01/30" 

var split= myDate .split("/"); 

new Date (split[2],split[1],split[0]); 

2)在javascript中的Date()中的月份它們的數字0-11。因此01/03 /2013改爲01/04 /2013

int month = myMonth -1; // for example: mymonth = 'March' => month = 2 
can use new Date(2013,month,30);