2016-02-10 8 views
5

Powiedz, mam tablicę miejsc urodzenialistę ludzi, którzy mają urodziny w ciągu 1 tygodnia Get

var bdates = ['1956-12-03', '1990-03-09',...] 

włożę każdy dzięki funkcji, która zwróci te daty, które mają urodziny w ciągu 7 dni od dzisiaj (lub od teraz?). Co mam w tej chwili jest tak:

var bdays = _.map(bdates, function(date) { 
    var birthDate = new Date(date); 
    var current = new Date(); 
    var diff = current - birthDate; // Difference in milliseconds 
    var sevenDayDiff = Math.ceil(diff/31557600000) - (diff/31557600000); //1000*60*60*24*365.25 
    if (sevenDayDiff <= 0.01916495550992) 
    return date; 
    else 
    return false; 
}); 

Wartość ,01995183087435 została ustalona od podejmowania liczbę milisekund w 51 tygodni i podzielenie przez liczbę milisekund w 52 tygodni, a następnie jeden minus, że stosunek ten powinien być " Zmienna sevenDayDiff '.

Moje JSFIDDLE, niestety, nie całkiem to dobrze. Jest w tym wiele rzeczy nie w porządku. Mój sevenDayDiff może być złą wartością. Również istnieje rok przestępny, nawet jeśli dzielę się przez 365.25. Mógłbym po prostu podchodzić do tego w niewłaściwy sposób.

Jest to aplikacja internetowa, więc administrator może wysłać wiadomość e-mail do osób, które mają urodziny w ciągu 7 dni Wszelkie wskazówki i sugestie są mile widziane.

+1

Musiałeś pomylił gdzieś. Po odjęciu dwóch dat przelicz wynik na dni (1000 * 60 * 60 * 24) i sprawdź, czy jest on mniejszy niż 8 (7 dni). – Ibu

+0

Crikey to wydaje się konwergentny sposób robienia tego. Proponuję użyć tej biblioteki http://momentjs.com/docs/#/query/ – dwjohnston

+0

@dwjohnston Świetna propozycja! –

Odpowiedz

1

var bdates = ['1956-12-03', '1990-03-09', '1970-02-14']; 
 

 
var now = moment('2015-02-10'); 
 
var birthDates = []; 
 

 
bdates.forEach(function(birthDate) { 
 
    var birthDay = moment(birthDate).year(now.year()); 
 
    var birthDayNextYear = moment(birthDate).year(now.year() + 1); 
 
    var daysRemaining = Math.min(Math.abs(birthDay.diff(now, 'days')), Math.abs(birthDayNextYear.diff(now, 'days'))); 
 
    
 
    if((daysRemaining >= 0) && (daysRemaining <= 7)) { 
 
    birthDates.push(birthDate); 
 
    } 
 
}); 
 

 
document.write(JSON.stringify(birthDates));
<script src="http://momentjs.com/downloads/moment.min.js"></script>

+0

To jest nieprawidłowe. rozważ "teraz" jest 2017-12-27, a niektóre urodziny to 2018-01-01 – YardenST

+0

@YardenST Dziękuję za zgłoszenie. Czy teraz jest lepiej? –

+0

jeszcze nie, kilka lat ma 29 lutego niektóre nie, możesz dostać wyjątek tam – YardenST

Powiązane problemy