2016-12-30 26 views
0

我想分配一个返回值给一个数组中的元素,出于某种原因,它将数组中的两个元素覆盖为相同的值而不是第二个元素。JavaScript - 分配数组索引返回值不工作

我正在使用的datepicker可以在这里找到,仅供参考。

http://www.eyecon.ro/datepicker/

function AddDays(date, days) 
{ 
    var newDate = new Date(date.setTime(date.getTime() + days * 86400000)); 
    return newDate; 
} 

$('#nights').on('change', function(){ 
    var $dp = $('#date'); 
    var t = $dp.DatePickerGetDate(); 
    console.log(t); // Output 1 
    t[1] = AddDays(t[0], $(this).val()); 
    console.log(t); // Output 2 
}); 

输出1:星期一2017年1月2日00:00:00 GMT-0600(中部标准时间),太阳2017年1月8日23:59:59 GMT-0600(中部标准时间)]

输出2:星期一2017年1月9日00:00:00 GMT-0600(中部标准时间),星期一2017年1月9日00:00:00 GMT-0600(中部标准时间)

正如您所看到的,当我尝试将第二个元素t[1]指定为等于的返回值时两个日期都设置相同的确切日期。但是,第二个元素应该等于第一个元素加上指定的天数。

我还验证了元素$(this).val()不为零。在我的情况下,实际上返回7,当我在t[1]的任务之前运行console.log($(this).val());

我在这里做错了什么?

+0

你能否创建一个工作示例? – Dekel

+0

在将它传递给'Date'构造函数之前,你正在改变原始日期,所以它们自然会在同一时间结束。删除'd.setTime()'。 – 2016-12-30 20:26:45

回答

1

当您拨打setTime时,您的功能会修改传入的日期。您可以删除对setTime的呼叫以解决您的问题。

function addDays(date, days) { 
    return new Date(date.getTime() + (days * 86400000)); 
} 

或做一个全新的约会对象,并呼吁副本setDatesetTime

function addDays(date, days) { 
    var result = new Date(date); 
    result.setDate(result.getDate() + days); 
    return result; 
} 
+0

这实际上是为我工作的答案。谢谢。像魅力一样工作。 – Entevily