2012-10-15 55 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