JavaScript использует передачу по ссылке для дат * (а также для всех не примитивов - var o = {}; var j = o; j.foo = 1; console.log(o.foo); //1
. С другой стороны, для чисел, строк и логических значений var o = 0; var j = o; j++; console.log(j); // 0
), так что ожидается поведение.
Если вам нужно скопировать дату, вы всегда можете
var date2 = new Date( date1.getTime() );
* Пожалуйста, смотрите комментарии, чтобы понять, почему это не совсем правильно.