var date1 = new Date();
date1.setFullYear(2011, 6, 1);
// 2011-07-01, ok
console.log(date1);
// set date2 the same date as date1
var date2 = date1;
// ...
// now I'm gonna set a new date for date2
date2.setFullYear(2011, 9, 8);
// 2011-10-08, ok
console.log(date2);
// 2011-10-08, wrong, expecting 2011-07-01
// I didn't assign a new date to date1
// WHY is date1 changed?
console.log(date1);
Respuesta
Fecha es objeto, por lo que se le asigna como referencia - enfoque simple es
date2 = new Date(date1);
Ambas variables de fecha son sólo referencias al mismo objeto fecha en la memoria. Entonces necesita date2
para ser un clon de date1
. Cambio:
var date2 = date1;
a esto:
var date2 = new Date(date1.getTime());
Usted necesita crear una copia de date1
, actualmente date1
y date2
se refieren al mismo objeto de fecha.
var date2 = new Date(date1.valueOf());
JavaScript utiliza pase por referencia de fechas * (así como todos los no-primitivas -. var o = {}; var j = o; j.foo = 1; console.log(o.foo); //1
Por otro lado, para los números, cadenas y booleanos var o = 0; var j = o; j++; console.log(j); // 0
), por lo que es el comportamiento esperado.
Si tiene que copiar una fecha siempre se puede
var date2 = new Date(date1.getTime());
* Por favor, vea los comentarios de entender por qué esto no es del todo correcto.
No es realmente pasar por referencia. Pasa por valor donde el valor es la referencia. Si se pasara por referencia, cambiar la referencia cambiaría el objeto: 'a = {}; b = a; b = null; 'En un modelo de evaluación de pase por referencia,' a === null' debe ser verdadero, ya que 'b' * es *' a' y establecemos 'b' en' null'. – davin
@davin Esa es una sutileza que no conocía. – cwallenpoole
Hasta la votación. Muy útil. Un detalle sin embargo. Si 'date2' ya ha sido asignado, entonces no es necesario el uso de' new'. La asignación se llevaría a cabo mediante: 'date2.setTime (date1.valueOf());'. – Karl
date2
Es una referencia a date1
.
para lograr los resultados esperados, haga lo siguiente:
var date1 = new Date();
date1.setFullYear(2011, 6, 1);
var date2 = new Date();
date2.setTime(date1.valueOf());
Variación de @ respuesta de sargas, pero la fecha() objetos en js coaccionar a número, por lo que no es necesario getTime():
// general case
var dateValueCopy = new Date(date1);
y se actualizan con la OP nombres de variables:
var date2 = new Date(date1);
Para mostrar la fecha en que los objetos fuerzan al número, pruebe: (new Date() * 1) – yzorg
<html lang="en">
<head>
<script>
function getDateDiff(time1, time2) {
var str1= time1.split('/');
var str2= time2.split('/');
var t1 = new Date(str1[2], str1[0]-1, str1[1]);
var t2 = new Date(str2[2], str2[0]-1, str2[1]);
var diffMS = t1 - t2;
console.log(diffMS + ' ms');
var diffS = diffMS/1000;
console.log(diffS + ' ');
var diffM = diffS/60;
console.log(diffM + ' minutes');
var diffH = diffM/60;
console.log(diffH + ' hours');
var diffD = diffH/24;
console.log(diffD + ' days');
alert(diffD);
}
//alert(getDateDiff('10/18/2013','10/14/2013'));
</script>
</head>
<body>
<input type="button" onclick="getDateDiff('10/18/2013','10/14/2013')" value="clickHere()" />
</body>
</html>
- 1. asignación de variables extraño
- 2. asignación de almacenamiento para las variables const
- 3. Visual Studio Debugger - Asignación automática de variables
- 4. indirecta asignación de variables en bash
- 5. Django: Asignación de variables en la plantilla
- 6. Función-Indicador Javascript Asignación
- 7. ¿Cómo funciona la asignación lógica de JavaScript?
- 8. Asignación de desestructuración en JavaScript
- 9. Javascript - La asignación de múltiples variables a las propiedades de objetos que se utilizan llaves de declaración de variables
- 10. Fecha javascript
- 11. Javascript ¿Diferencia de fecha?
- 12. Asignación de objetos JSON a objetos Javascript
- 13. primitivas Asignación de JavaScript a su equivalente variables nombrado como "constantes"
- 14. Asignación de número de línea de Javascript
- 15. Comprobar la fecha en JavaScript
- 16. asignación de interoperabilidad de Javascript en Clojurescript
- 17. Javascript y asignación de prototipo de función
- 18. Variables de entorno de Javascript
- 19. asignación al resultado de una función de cambios de variables
- 20. jquery/javascript convertir fecha cadena a fecha
- 21. Fecha vs nueva Fecha en JavaScript
- 22. Orden de asignación de variables locales en la pila
- 23. Variables de clase en Javascript
- 24. JavaScript Fecha ISO8601
- 25. Javascript Fecha: mes siguiente
- 26. DateTime a javascript fecha
- 27. fecha JavaScript comparación
- 28. javascript/fecha JSON literal
- 29. Resta de fecha en JavaScript
- 30. JavaScript Fecha Comparación de objetos
Parece que 'date2' se establece como un puntero a lo que apunta' date1'. – James