2011-02-09 106 views
115

Tengo un campo en una cuadrícula que contiene fecha/hora y necesito saber la diferencia entre esa fecha y hora actual. ¿Cuál podría ser la mejor manera de hacerlo?¿Cómo restar fecha/hora en javascript?

+2

¿Cuál es el formato de la fecha/hora? –

+0

se almacena así "2011-02-07 15:13:06" –

+2

Esto no es un duplicado. Tiene una solución diferente y se explica mucho mejor. También tiene un mejor rango de búsqueda. – 3Dom

Respuesta

160

Esto le dará la diferencia entre dos fechas, en milisegundos

var diff = Math.abs(date1 - date2); 

En su ejemplo, sería

var diff = Math.abs(new Date() - compareDate); 

Es necesario asegurarse de que compareDate es un objeto válido Date .

Algo como esto probablemente va a funcionar para usted

var diff = Math.abs(new Date() - new Date(dateStr.replace(/-/g,'/'))); 

es decir, girando "2011-02-07 15:13:06" en new Date('2011/02/07 15:13:06'), que es un formato que el Date constructor puede comprender.

+1

esto ignora el manejo DTS para la zona horaria local (funciona bien con UTC) –

+0

en TypeScript Obtengo un error tslint cuando trato de hacer esto: var diff = Math.abs (new Date() - compareDate); – Devid

21

Puede restar dos objetos de fecha.

var d1 = new Date(); //"now" 
var d2 = new Date("2011/02/01") // some date 
var diff = Math.abs(d1-d2); // difference in milliseconds 
6

Puede utilizar getTime() método para convertir el Date con el número de milisegundos desde el 1 de enero de 1970. A continuación, puede hacer fácil las operaciones aritméticas con las fechas. Por supuesto, puede convertir el número de nuevo a Date con setTime(). Ver here un ejemplo.

6

Si desea obtener una diferencia en el tiempo del reloj de pared, para la zona horaria local y con la conciencia de ahorro de luz diurna.


Date.prototype.diffDays = function (date: Date): number { 

    var utcThis = Date.UTC(this.getFullYear(), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds()); 
    var utcOther = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()); 

    return (utcThis - utcOther)/86400000; 
}; 

prueba


it('diffDays - Czech DST', function() { 
    // expect this to parse as local time 
    // with Czech calendar DST change happened 2012-03-25 02:00 
    var pre = new Date('2012/03/24 03:04:05'); 
    var post = new Date('2012/03/27 03:04:05'); 

    // regardless DST, you still wish to see 3 days 
    expect(pre.diffDays(post)).toEqual(-3); 
}); 

minutos o segundos Diff es de misma manera.

10

A menos que esté restando fechas en el mismo cliente de navegador y no se preocupe por casos extremos como cambios de horario de verano, probablemente sea mejor que use moment.js que ofrece poderosas API localizadas. Por ejemplo, esto es lo que tengo en mis utils.js:

subtractDates: function(date1, date2) { 
    return moment.subtract(date1, date2).milliseconds(); 
}, 
millisecondsSince: function(dateSince) { 
    return moment().subtract(dateSince).milliseconds(); 
},