2013-05-10 24 views
8

Ho provato questo ma non riesceCome ottengo quanti giorni fino al mio prossimo compleanno?

var diffDays1=(function(){ 
var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds 
var secondDate = new Date(new Date().getFullYear()+1,4,5); 
var firstDate = new Date(); 
return Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay))); 
})(); 

Wolfram Alpha dice che è 330 giorni, diffDays1 mostra che è 359. Ciò è probabilmente dovuto al risparmio di luce del giorno o qualcosa del genere. C'è un modo per calcolare con precisione giorni da allora senza farlo lato server.

+0

La funzione non restituisce sempre il numero di giorni fino a quando il prossimo compleanno. Restituisce il numero di giorni fino al tuo compleanno del prossimo anno, che a volte è il tuo prossimo compleanno. – Robert

risposta

14

Il problema è che si sta basando il mese in aprile a 4, quando aprile è 3 in Javascript. Vedi https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date#Parameters

var diffDays1=(function(){ 
    var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds 
    var secondDate = new Date(new Date().getFullYear()+1,3,5); 
    var firstDate = new Date(); 
    return Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay))); 
})(); 
+0

cosa rappresenta il 1 qui? – Lucas

4

Perché reinventare la ruota ?? Usa datejs

e dopo:

var startd = Date.parseExact(ind, "yyyy-MM-dd"); 
var endd = Date.parseExact(end, "yyyy-MM-dd"); 
var diff = new Date(endd - startd); 
var days = diff/1000/60/60/24; 

Questo è tutto!

2

La libreria moment.js (http://momentjs.com) gestisce questo e molti altri problemi di data JavaScript in modo molto semplice e gradevole. La funzione diff (http://momentjs.com/docs/#/displaying/difference/) farà esattamente quello che vuoi.

La funzione fromNow è anche super bello se si desidera visualizzare il numero di giorni da oggi si potrebbe fare qualcosa di simile:

moment([2014, 4, 5]).fromNow(); 

produrrebbe qualcosa come "330 giorni" se è 330 giorni di distanza.

http://momentjs.com/docs/#/displaying/fromnow/

Problemi correlati