2016-04-13 23 views
15

ottengo risultati non corretti quando si cerca di trovare la differenza numerica tra due date:momento js - due date differenza nel numero di giorni

var startDate = moment($('[name="date-start"]').val(), "DD.MM.YYYY"), // $('[name="date-start"]').val() === "13.04.2016" 
endDate  = moment($('[name="date-end"]' ).val(), "DD.MM.YYYY"); // $('[name="date-end"]').val() === "28.04.2016" 

var diff = startDate.diff(endDate); 

console.log(moment(diff).format('E')); 

Tra 13.04.2016 e 28.04.2016 non dovrei ottenere che differenza è o giorni ...

ho cercato di molteplici combinazioni:

  • scambio startDate.diff(endDate) con endDate.diff(startDate)
  • format('E') con qualcosa che mi è venuta in mente a cercare il risultato SO

: per tutto il tempo ho capito che la differenza è di 3 o 2 giorni.

Cosa sto sbagliando? Grazie in anticipo.

risposta

28

Dal momento che docs: format('E') sta per giorno della settimana. così il vostro diff viene calcolato in quale giorno della settimana, che deve essere compreso tra 1 e 7.

Dalle moment.js documentazione di nuovo, qui è ciò che suggeriscono:

var a = moment([2007, 0, 29]); 
var b = moment([2007, 0, 28]); 
a.diff(b, 'days') // 1 

Ecco un JSFiddle per il vostro caso particolare:

$('#test').click(function() { 
 
    var startDate = moment("13.04.2016", "DD.MM.YYYY"); 
 
    var endDate = moment("28.04.2016", "DD.MM.YYYY"); 
 

 
    var result = 'Diff: ' + endDate.diff(startDate, 'days'); 
 

 
    $('#result').html(result); 
 
});
#test { 
 
    width: 100px; 
 
    height: 100px; 
 
    background: #ffb; 
 
    padding: 10px; 
 
    border: 2px solid #999; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.12.0/moment.js"></script> 
 

 
<div id='test'>Click Me!!!</div> 
 
<div id='result'></div>

+0

ok, ma come ottengo a differenza tra queste due date sono 15 giorni? Grazie per la risposta –

+0

Aggiornato la mia risposta ... controlla e fammi sapere se non funziona ancora – dubes

+0

Grazie per la soluzione, ma ora dovrei aggiungere un sacco di codice per ottenere quell'array da quello che ottengo da $ ('input [nome = "data-inizio"]'). val() 'è' "13.04.2016" '. C'è qualche soluzione che potrebbe funzionare con il mio formato di data corrente? –

0

il metodo diff restituisce la differenza in millisecondi. L'istanziazione moment(diff) non è significativa.

È possibile definire una variabile:

var dayInMilliseconds = 1000 * 60 * 60 * 24; 

e quindi utilizzarlo in questo modo:

diff/dayInMilliseconds // --> 15 

Modifica

in realtà, questo è costruito nel metodo diff, Dubes' la risposta è meglio

+0

Questo mi ha aiutato molto, fammi vedere se andrei in questo modo –

Problemi correlati