2012-10-15 89 views
0

如果日期爲sunday,我想添加+1。以下代碼適用於其他日期。但是當我通過30 sept 2012我給了我1 Sept 2012而不是1 Oct 2012dateMsg。代碼有什麼問題?請指導。我想我在這個月的所有最後日期都會面臨同樣的問題。如何將1添加到整個日期而不僅僅是一天?在javascript中添加日期的天數

var monthName=convertMnthNoToName(freeLookEndDt.getMonth()+1); 

    if (freeLookEndDt.getDay()==0) { 

     var date=new Date(freeLookEndDt.getFullYear(),freeLookEndDt.getMonth(), 
     freeLookEndDt.getDate()+1); 
     var newmonthName=convertMnthNoToName(date.getMonth()+1); 
     var dateMsg = date.getDate() + '-' + monthName + '-' + freeLookEndDt.getFullYear(); 

     document.forms[0].flEndDt.value=dateMsg; 

    } 

和convertMnthNoToName()

function convertMnthNoToName(val) 
{ 
    if(val==01 || val==1) 
    { 
     val1="Jan"; 
    } 
    if(val==02 || val==2) 
    { 
     val1="Feb"; 
    } 
    if(val==03 || val==3) 
    { 
     val1="Mar"; 
    } 
    if(val==04 || val==4) 
    { 
     val1="Apr"; 
    } 
    if(val==05 || val==5) 
    { 
     val1="May"; 
    } 
    if(val==06 || val==6) 
    { 
     val1="Jun"; 
    } 
    if(val==07 || val==7) 
    { 
     val1="Jul"; 
    } 
    if(val==08 || val==8) 
    { 
     val1="Aug"; 
    } 
    if(val==09 || val==9) 
    { 
     val1="Sep"; 
    } 
    if(val==10) 
    { 
     val1="Oct"; 
    } 
    if(val==11) 
    { 
     val1="Nov"; 
    } 
    if(val==12) 
    { 
     val1="Dec"; 
    } 

    return val1; 
} 

其中freeLookEndDt = Sun Sep 30 00:00:00 UTC+0530 2012

+0

ü定義newmonthName但使用MONTHNAME,錯字? –

+2

這裏是你的'convertMnthNoToName'函數3行https://gist.github.com/3890921 – elclanrs

+0

請參見[this SO answer](http://stackoverflow.com/questions/563406/add-days-to-datetime-using -javascript)。 –

回答

0

ü定義newmonthName但使用monthName。因此它使用舊的月份名稱。 newmonthName早該換

你應該能夠做到freeLookEndDt.setDate(freeLookEndDt.getDate()+1)

0

而不是

var date=new Date(freeLookEndDt.getFullYear(), freeLookEndDt.getMonth(), 
        freeLookEndDt.getDate()+1); 

使用

var date = new Date(); 
date.setFullYear(freeLookEndDt.getFullYear()); 
date.setMonth(freeLookEndDt.getMonth()); 
date.setDate(freeLookEndDt.getDate()+1); 

這樣,你會在被設定的一天最後一步,日期將重新計算存儲的月份和年份以更正值。請注意,如果您有Dec.31,那麼一年也可以更改。

此外,函數convertMnthNoToName可以修改爲具有更緊湊的實現並且還能夠處理字符串輸入值,例如「03」。

完整代碼:

var monthName=convertMnthNoToName(freeLookEndDt.getMonth()+1); 

if (freeLookEndDt.getDay()==0) { 

    var date = new Date(); 
    date.setFullYear(freeLookEndDt.getFullYear()); 
    date.setMonth(freeLookEndDt.getMonth()); 
    date.setDate(freeLookEndDt.getDate()+1); 
    var newmonthName=convertMnthNoToName(date.getMonth()+1); 
    var dateMsg = date.getDate() + '-' + newmonthName + '-' + freeLookEndDt.getFullYear(); 

    document.forms[0].flEndDt.value=dateMsg; 
} 

/** 
* Converts month (1-based) to its string representation 
* @param {Number|String} val Month index (from 1-January to 12-December) 
* @return {String} String representation of month or empty string for invalid input parameter 
*/ 
function convertMnthNoToName(val) 
{ 
    val = parseInt(val); // string "01" will be converted to 1 
    if(val>=1 && val<=12) 
    { 
     var monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; 
     return monthNames[val-1]; 
    } 
    return ""; 
} 
1

DEMO

這是更有效的。此外,你需要採取月份名稱後,你添加一天

請注意您的例子中的日期是解決到我國的星期六!

var monthNames ="Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(",") 

if (freeLookEndDt.getDay()==0) { 
    freeLookEndDt.setDate(freeLookEndDt.getDate()+1); 
    var dateMsg = freeLookEndDt.getDate() + '-' + monthNames[freeLookEndDt.getMonth()] + '-' + freeLookEndDt.getFullYear(); 
    document.forms[0].flEndDt.value=dateMsg; 
} 

,或者如果你需要保持freeLookEndDate:

if (freeLookEndDt.getDay()==0) { 
    var date = new Date(freeLookEndDt.getTime()); 
    date.setDate(date.getDate()+1); 
    var dateMsg = date.getDate() + '-' + monthNames[date.getMonth()] + '-' + date.getFullYear(); 
    document.forms[0].flEndDt.value=dateMsg; 
} 
+1

很好的解決方案mplungjan – Shaheer