Edward
Edward

Reputation: 1377

Add number of days in Date in javascript

I want to add +1 if the date is sunday. Below code works for the rest dates. But when I pass 30 sept 2012 I gives me 1 Sept 2012 instead of 1 Oct 2012 in dateMsg. What is wrong with the code?. Please guide. I guess I'l face same problem in all last date of the month.How to add 1 to whole date rather than just the day?

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;

    }

and 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;
}

where freeLookEndDt = Sun Sep 30 00:00:00 UTC+0530 2012

Upvotes: 0

Views: 1196

Answers (3)

mplungjan
mplungjan

Reputation: 177940

DEMO

This is more efficient. Also you need to take the monthname AFTER you add the day

Please note your date in your example is resolving to Saturday in my country!!!

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;
}

or if you need to keep 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;
}

Upvotes: 1

bhovhannes
bhovhannes

Reputation: 5679

Instead of

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

use

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

That way, you'll be setting day at the last step, and Date will recalculate stored month and year to correct values. Note that year also can change, if you have Dec.31.

Also, the function convertMnthNoToName can be modified to have more compact implementation and be able to handle also string input values, such as "03".

Complete code:

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 "";
}

Upvotes: 0

Karthik T
Karthik T

Reputation: 31952

u define newmonthName but use monthName. Thus it is using old month name. newmonthNameshould have changed

you should just be able to do freeLookEndDt.setDate(freeLookEndDt.getDate()+1)

Upvotes: 0

Related Questions