Differenza tra le date in JavaScript

Come trovare la differenza tra due date?

Utilizzando l’object Date e il relativo valore in millisecondi, è ansible calcolare le differenze:

var a = new Date(); // Current date now. var b = new Date(2010, 0, 1, 0, 0, 0, 0); // Start of 2010. var d = (ba); // Difference in milliseconds. 

È ansible ottenere il numero di secondi (come numero intero / numero intero) dividendo i millisecondi per 1000 per convertirlo in secondi, quindi convertire il risultato in un numero intero (ciò rimuove la parte frazionaria che rappresenta i millisecondi):

 var seconds = parseInt((ba)/1000); 

Potresti quindi ottenere interi minutes dividendo i seconds per 60 e convertendoli in un numero intero, quindi hours dividendo i minutes per 60 e convertendoli in un numero intero, quindi unità di tempo più lunghe nello stesso modo. Da questo, una funzione per ottenere la massima quantità totale di un’unità di tempo nel valore di un’unità inferiore e l’unità inferiore rimanente può essere creata:

 function get_whole_values(base_value, time_fractions) { time_data = [base_value]; for (i = 0; i < time_fractions.length; i++) { time_data.push(parseInt(time_data[i]/time_fractions[i])); time_data[i] = time_data[i] % time_fractions[i]; }; return time_data; }; // Input parameters below: base value of 72000 milliseconds, time fractions are // 1000 (amount of milliseconds in a second) and 60 (amount of seconds in a minute). console.log(get_whole_values(72000, [1000, 60])); // -> [0,12,1] # 0 whole milliseconds, 12 whole seconds, 1 whole minute. 

Se ti stai chiedendo quali sono i parametri di input forniti sopra per il secondo object Date , guarda i loro nomi qui sotto:

 new Date(, , , , , , ); 

Come indicato nei commenti di questa soluzione, non è necessario fornire tutti questi valori a meno che non siano necessari per la data che si desidera rappresentare.

Ho trovato questo e funziona bene per me:

Calcolo della differenza tra due date conosciute

Sfortunatamente, calcolare un intervallo di date come giorni, settimane o mesi tra due date conosciute non è così facile perché non puoi semplicemente aggiungere gli oggetti Data insieme. Per poter utilizzare un object Date in qualsiasi tipo di calcolo, dobbiamo prima recuperare il valore interno del millisecondo della Data, che è memorizzato come un numero intero di grandi dimensioni. La funzione per farlo è Date.getTime (). Dopo che entrambe le date sono state convertite, la sottrazione di quella successiva a quella precedente restituisce la differenza in millisecondi. L’intervallo desiderato può quindi essere determinato dividendo quel numero per il corrispondente numero di millisecondi. Ad esempio, per ottenere il numero di giorni per un dato numero di millisecondi, dovremmo dividere per 86.400.000, il numero di millisecondi in un giorno (1000 x 60 secondi x 60 minuti x 24 ore):

 Date.daysBetween = function( date1, date2 ) { //Get 1 day in milliseconds var one_day=1000*60*60*24; // Convert both dates to milliseconds var date1_ms = date1.getTime(); var date2_ms = date2.getTime(); // Calculate the difference in milliseconds var difference_ms = date2_ms - date1_ms; // Convert back to days and return return Math.round(difference_ms/one_day); } //Set the two dates var y2k = new Date(2000, 0, 1); var Jan1st2010 = new Date(y2k.getFullYear() + 10, y2k.getMonth(), y2k.getDate()); var today= new Date(); //displays 726 console.log( 'Days since ' + Jan1st2010.toLocaleDateString() + ': ' + Date.daysBetween(Jan1st2010, today)); 

L’arrotondamento è facoltativo, a seconda che si desideri giorni parziali o meno.

Riferimento

  // This is for first date first = new Date(2010, 03, 08, 15, 30, 10); // Get the first date epoch object document.write((first.getTime())/1000); // get the actual epoch values second = new Date(2012, 03, 08, 15, 30, 10); // Get the first date epoch object document.write((second.getTime())/1000); // get the actual epoch values diff= second - first ; one_day_epoch = 24*60*60 ; // calculating one epoch if ( diff/ one_day_epoch > 365 ) // check , is it exceei { alert( 'date is exceeding one year'); } 

Se stai cercando una differenza espressa come una combinazione di anni, mesi e giorni, ti suggerirei questa funzione:

 function interval(date1, date2) { if (date1 > date2) { // swap var result = interval(date2, date1); result.years = -result.years; result.months = -result.months; result.days = -result.days; result.hours = -result.hours; return result; } result = { years: date2.getYear() - date1.getYear(), months: date2.getMonth() - date1.getMonth(), days: date2.getDate() - date1.getDate(), hours: date2.getHours() - date1.getHours() }; if (result.hours < 0) { result.days--; result.hours += 24; } if (result.days < 0) { result.months--; // days = days left in date1's month, // plus days that have passed in date2's month var copy1 = new Date(date1.getTime()); copy1.setDate(32); result.days = 32-date1.getDate()-copy1.getDate()+date2.getDate(); } if (result.months < 0) { result.years--; result.months+=12; } return result; } // Be aware that the month argument is zero-based (January = 0) var date1 = new Date(2015, 4-1, 6); var date2 = new Date(2015, 5-1, 9); document.write(JSON.stringify(interval(date1, date2))); 
 Date.prototype.addDays = function(days) { var dat = new Date(this.valueOf()) dat.setDate(dat.getDate() + days); return dat; } function getDates(startDate, stopDate) { var dateArray = new Array(); var currentDate = startDate; while (currentDate < = stopDate) { dateArray.push(currentDate); currentDate = currentDate.addDays(1); } return dateArray; } var dateArray = getDates(new Date(), (new Date().addDays(7))); for (i = 0; i < dateArray.length; i ++ ) { // alert (dateArray[i]); date=('0'+dateArray[i].getDate()).slice(-2); month=('0' +(dateArray[i].getMonth()+1)).slice(-2); year=dateArray[i].getFullYear(); alert(date+"-"+month+"-"+year ); } 
 var DateDiff = function(type, start, end) { let // or var years = end.getFullYear() - start.getFullYear(), monthsStart = start.getMonth(), monthsEnd = end.getMonth() ; var returns = -1; switch(type){ case 'm': case 'mm': case 'month': case 'months': returns = ( ( ( years * 12 ) - ( 12 - monthsEnd ) ) + ( 12 - monthsStart ) ); break; case 'y': case 'yy': case 'year': case 'years': returns = years; break; case 'd': case 'dd': case 'day': case 'days': returns = ( ( end - start ) / ( 1000 * 60 * 60 * 24 ) ); break; } return returns; } 

uso

var qtMonths = DateDiff (‘mm’, new Date (‘2015-05-05’), new Date ());

var qtYears = DateDiff (‘yy’, new Date (‘2015-05-05’), new Date ());

var qtDays = DateDiff (‘dd’, new Date (‘2015-05-05’), new Date ());

O

var qtMonths = DateDiff (‘m’, new Date (‘2015-05-05’), new Date ()); // m || y || d

var qtMonths = DateDiff (‘month’, new Date (‘2015-05-05’), new Date ()); // mese || anno || giorno

var qtMonths = DateDiff (‘months’, new Date (‘2015-05-05’), new Date ()); // mesi || anni || giorni

 var DateDiff = function (type, start, end) { let // or var years = end.getFullYear() - start.getFullYear(), monthsStart = start.getMonth(), monthsEnd = end.getMonth() ; if(['m', 'mm', 'month', 'months'].includes(type)/*ES6*/) return ( ( ( years * 12 ) - ( 12 - monthsEnd ) ) + ( 12 - monthsStart ) ); else if(['y', 'yy', 'year', 'years'].includes(type)) return years; else if (['d', 'dd', 'day', 'days'].indexOf(type) !== -1/*EARLIER JAVASCRIPT VERSIONS*/) return ( ( end - start ) / ( 1000 * 60 * 60 * 24 ) ); else return -1; }