2011-01-25 47 views
0

我一直在修补日期对象。用javascript处理日期对象

我想添加一天的动态数量到一天,然后将结果日期作为变量并将其发布到表单。

var startDate = $('#StartDate').datepicker("getDate"); 
    var change = $('#numnights').val(); 
    alert(change); 
    var endDate = new Date(startDate.getFullYear(), startDate.getMonth(),startDate.getDate() + change); 

除了最后一部分以外,其他的都正确。它并没有添加日期到当天

take this scenario: 
startdate = 2011-03-01 
change = 1 
alert change = 1 
endDate = 2011-03-11 *it should be 2011-03-02* 

谢谢你所有的快速回复。

将变化变量转换为整数做了诀窍。谢谢。

parseInt(change) 

只是为了对这个延伸:是否有分配的变量的类型的方式,如VAR电荷(INT)?

回答

2

您可能已经成为字符串连接的受害者。

试着改变你的最后一个参数中的日期构造函数:startDate.getDate() + parseInt(change)

以供将来参考见this example

+0

将变量更改为工作的整数。然而,如果一天进入新月,月份保持不变。 – goingsideways

+0

它不应该。例如,如果您调用了'var dt = new Date(2010,11,32);''dt对象将包含2011年1月1日。Date构造函数处理月和日的溢出。我可以为你设置一个例子,看看你是否喜欢。 – nybbler

+0

请做。编号想知道这是如何工作的 – goingsideways

1

change转换为数字后再添加。它看起来像你得到了一个字符串连接操作,而不是你在代码中所期望的。

1

我相信你是连接而不是使用数学运算符。试试这个,

var endDate = new Date(startDate.getFullYear(), startDate.getMonth(),startDate.getDate() + (+change)); 
1

它看起来像您不添加结束的一天,你concatinating这么'1' + '1' = '11'

使用parseInt(),以确保您使用的整数

例如

工作
var change = parseInt($('selector').val()); 

此外,使用此解决方案,如果您在m的第29个开始日期说,您可能很容易就会结束一天超出范围onth并获得更改5