JavaScript - 为返回值分配数组索引不起作用

时间:2016-12-30 20:16:55

标签: javascript jquery arrays date

我正在尝试为数组中的元素指定返回值,并且由于某种原因,它会将数组中的两个元素重写为相同的值而不是第二个元素。

我可以在此处找到我正在使用的日期选择器,供参考。

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(中央标准时间),Sun Jan 08 2017 23:59:59 GMT-0600(中央标准时间)]

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

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

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

我在这里做错了什么?

1 个答案:

答案 0 :(得分: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;
}