【问题标题】:JavaScript - Assigning Array Index to Return Value not workingJavaScript - 将数组索引分配给返回值不起作用
【发布时间】:2016-12-30 20:16:55
【问题描述】:

我正在尝试为数组中的元素分配返回值,但由于某种原因,它会将数组中的两个元素都覆盖为相同的值,而不仅仅是第二个元素。

我使用的日期选择器可以在这里找到,以供参考。

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] 分配为等于 AddDays(t[0], $(this).val()) 的返回值时,两个日期都设置为相同的确切日期。但是,第二个元素应该等于第一个元素加上指定的天数。

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

我在这里做错了什么?

【问题讨论】:

  • 你能创建一个工作示例吗?
  • 您在将原始日期传递给Date 构造函数之前对其进行了变异,因此它们自然会以相同的时间结束。删除d.setTime()

标签: javascript jquery arrays date


【解决方案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;
}

【讨论】:

  • 这实际上是对我有用的答案。谢谢。像魅力一样工作。
猜你喜欢
  • 1970-01-01
  • 2012-09-26
  • 2021-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
相关资源
最近更新 更多