Steven
Steven

Reputation: 18869

Adding days to a date - date getting converted to string

So I'm trying to add a certain number of days to a date, and I'm getting a strange issue:

var date = new Date();

var newdate = date.getDate() + $('#ddlDays option:selected').val();

date.setDate(newdate);

So if today is 09/29/2010, the Date is 29. But if a user selects "5" from ddlDays, it will assume I am adding strings together, adding 295 days to my date.

I was under the impression that javascript would assume they were integers? Does getDate() return a string instead of an integer?

How can I fix this?

Upvotes: 2

Views: 931

Answers (5)

Krishna Chytanya
Krishna Chytanya

Reputation: 1438

adding days and converting it to a specific format are talked about in this question

Upvotes: 0

David Hedlund
David Hedlund

Reputation: 129802

If you just want to add the selected value to the day of the month (i.e. 29 + 5), then you need to parse the string value into an int:

var newdate = date.getDate() + parseInt( $('#ddlDays option:selected').val(), 10);

But if you actually want a new date, rather than an int, as your result, you can do something like this:

date.setDate( date.getDate() + parseInt( $('#ddlDays option:selected').val(), 10);

Upvotes: 4

MikeTheReader
MikeTheReader

Reputation: 4190

Surround your string value with parseInt. JavaScript will concatenate strings to numbers (see http://www.hunlock.com/blogs/The_Complete_Javascript_Number_Reference for a thorough run through.)

This should do the trick:

var newdate = date.getDate() + parseInt($('#ddlDays option:selected').val());

or

var newdate = date.getDate() + parseInt($('#ddlDays option:selected').val(), 10);

Upvotes: 1

LukeH
LukeH

Reputation: 269528

No, the getDate() call doesn't return a string, but the val() call does.

You'll need to parse the string to an integer instead:

var newdate = date.getDate() + parseInt($('#ddlDays option:selected').val(), 10);

Upvotes: 1

user113716
user113716

Reputation: 322552

It is .val() that is returning a String. You can use .parseInt() to convert to a Number.

var newdate = date.getDate() + 
                      (parseInt($('#ddlDays option:selected').val(), 10) || 0);

or

var newdate = date.getDate() + ~~$('#ddlDays option:selected').val();

Upvotes: 2

Related Questions