我主要编写后端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??
});
});
答案 0 :(得分:1)
这种情况正在发生,因为ie
,de
和gb
都是相同的对象,因此您要设置并从同一对象获取。您需要让每个人都有自己独立的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);