2012-04-09 99 views
-1

我使用Date()函數將字符串轉換爲日期對象。問題是,如果我給Date("April , 31 ,2012")它會把它作爲May , 01 , 2012(其餘的日子工作)請檢查我的方法是正確的,從下面的代碼。Javascript:日期自動遞增+1值(轉換字符串爲日期對象)

function TestDate(objValue,strError){ 

    var ret=true; 
    var frmdate=objValue.value; 
    var datesplit=frmdate.split("-"); 
    var y =datesplit[0]; 
    var m=datesplit[1]; 
    var d=datesplit[2]; 
    var testdate; 
    // Create date object using given input data 
    testdate = new Date(m+"/"+d+"/"+y); 
    alert("Created date"+testdate.toString()); 
    var td=testdate.getDate(); 
    var tm=testdate.getMonth()+1; 
    var ty =testdate.getFullYear(); 
    alert(d+"="+td); 
    alert(m+"="+tm); 
    alert(y+"="+ty); 
    var valid=((d==td) && (m==tm) && (y==ty)); 
    alert(valid); 
    if(valid == false) 
    { 
     ret =false; 
    } 
    return ret; 
} 
+5

四月只有30天,默認情況下它會增加一天到31-04,因此,5月1日將返回。 – ajreal 2012-04-09 11:52:11

+0

objValue.value有「2012-04-25」格式 – Sridhar 2012-04-09 11:57:01

回答

1

正如評論賽義德由@ajreal,月只有30天。

內部日期對象將月份遞增以具有有效日期。

+0

@ajreal謝謝 – Sridhar 2012-04-09 12:04:06

+0

@ajreal感謝您的回覆。我已經知道四月三十一日是不是有效的日期這就是爲什麼它可能01,但在我的模塊,我希望4月31日日期對象,以便我可以比較我的表單日期日期對象以驗證我的formdate。現在我意識到,如果我爲4月31日創建日期對象,我不能驗證我的表單日期。 – Sridhar 2012-04-09 12:14:57

0

代碼:

testdate = new Date(m+"/"+d+"/"+y); 

是依賴於非標,串的執行特定的解析。遠不如用你開始使用數據來創建明確的日期:

testdate = new Date(y, m - 1, d); 

作爲驗證日期,使用格式YYYY-MM-DD的ISO8601標準的日期一個簡單的功能是:

function validateDate(dateString) { 
    var bits = dateString.split('-'); 
    var date = new Date(bits[0], bits[1] - 1, bits[2]); 
    return date && date.getFullYear() == bits[0] && date.getDate() == bits[2]; 
} 

這樣,如果傳遞給函數的字符串變成日期,您可以檢查創建的日期是否與輸入匹配。如果不是,則該函數無效並且函數返回false。如果字符串沒有變成日期,它也返回false。

相關問題