Reputation: 1377
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
Reputation: 177940
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
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
Reputation: 31952
u define newmonthName
but use monthName
. Thus it is using old month name. newmonthName
should have changed
you should just be able to do freeLookEndDt.setDate(freeLookEndDt.getDate()+1)
Upvotes: 0