设置多个日期变量 - 覆盖变量的问题

时间:2014-03-19 11:22:09

标签: javascript jquery

我主要编写后端Ruby代码,我正在尝试做一些我真正不熟悉的前端JS工作。

我基本上试图根据英国主日期预先填写国际日期的许多字段。每个国际日期都可以通过几天的简单加法或减法来确定。

这是我所做的简短版本。逐行它在chrome控制台中工作正常但由于某些原因在每个国家/地区变量上设置日期时,它们似乎是前传并影响下一个。我不明白发生了什么,因为独立命名的变量应该能够独立改变?我已经添加了console.log输出,并在每个输出上添加了注释。

非常感谢任何帮助。

$('#gb_date').change(function() {

    //Grab GB date
    gb = new Date($('#gb_date').val());
      console.log(gb) // Mon Mar 03 2014 00:00:00 GMT+0000 (GMT) : This is correct and as expected

    // Initially set territory dates vars to equal the gb date
    var ie = gb;
    var de = gb;

    // Then calculate and set territory dates by adding or subtracting days
    ie.setDate(ie.getDate() - 3); //Friday before
      console.log(ie); // Fri Feb 28 2014 00:00:00 GMT+0000 (GMT) : Again as expected
    de.setDate(de.getDate() + 4); //Friday after
      console.log(ie); // Tue Mar 04 2014 00:00:00 GMT+0000 : Why has ie been reset here??
      console.log(de); // Tue Mar 04 2014 00:00:00 GMT+0000 : Why is this being set based off the ie value and not the de var set above??

  });

});

1 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为iedegb都是相同的对象,因此您要设置并从同一对象获取。您需要让每个人都有自己独立的Date对象

//Create new Date objects based off the old one.
var ie = new Date(gb);
var de = new Date(gb);

ie.setDate(ie.getDate() - 3);
de.setDate(de.getDate() + 4);