Ich erstelle eine einfache App zur Geburtstagserinnerung, in der ich die Namen und Geburtstage in JSON erhalte und die Namen sortiert anzeigen muss, basierend darauf, wessen Geburtstag als nächstes kommt.

Mein logischer Gedanke wäre, den aktuellen Tag und Monat vom Geburtstag abzuziehen und dann eine Art zu machen. Aber wie würde ich dann mit -ve Ergebnissen oder Situationen wie im Dezember usw. umgehen? Ich vermutete, dass es eine einfachere Lösung gegeben haben könnte, aber ich bin ziemlich ahnungslos.

Hier ist ein Plunkr mit dem Basisarbeitscode: http://plnkr.co/edit/AkP6FRRG917TDdTtfWM7?p = Vorschau

0
user427 5 Dez. 2013 im 23:39

2 Antworten

Beste Antwort

Konvertieren Sie die Zeichenfolge wie von anderen vorgeschlagen in einen Unix-Zeitstempel oder ein Unix-Datum.

Hier ist ein aktualisierter Plunker.

Der Controller fügt den Daten eine fromNow-Variable hinzu:

$scope.friends.forEach(function(data){
      var day = data.birthday.split("/")
      var currentYear = new Date().getFullYear();
      var birthdayDate = new Date(currentYear, day[0] - 1, day[1])
      var now = new Date().valueOf();
      if (birthdayDate.valueOf() < now){ 
          birthdayDate.setFullYear(currentYear+1)
      }
      data.fromNow = birthdayDate.valueOf() - now;
})
  1. Holen Sie sich die einzelnen Datums- / Monatsteile (so erhalten wir eine Liste wie ["02", "14", "1985"])
  2. Erstellen Sie ein Datumsobjekt basierend auf dem aktuellen Jahr, dem Monat day[0] und dem Tag day[1]. (Beachten Sie, dass wir 1 von den Monaten abziehen, da die Monate in Javascript auf 0 basieren.)
  3. Holen Sie sich einen numerischen Wert für das aktuelle Datum / die aktuelle Uhrzeit
  4. Wenn der Geburtstag in der Vergangenheit liegt, fügen Sie ein Jahr hinzu
  5. Weisen Sie fromNow die Anzahl der Millisekunden zwischen jetzt und dem Geburtstag zu.

Sie müssten es so ändern, dass, wenn jemand heute Geburtstag hat, kein Jahr hinzugefügt wird, sodass es als letztes in die Liste aufgenommen wird.

Beachten Sie auch, dass ich dem Parameter orderBy Anführungszeichen hinzugefügt habe:

<tr ng-repeat="friend in friends| orderBy:'fromNow' ">
0
Matt Zeunert 5 Dez. 2013 im 20:04

Konvertieren Sie das aktuelle Datum und das Geburtsdatum in UNIX-Zeit und vergleichen Sie sie anhand der Unterschiede zwischen diesen beiden Werten

birthdates = [new Date(1988,01,27), new Date(2013,01,01)];

birthdates.sort(function(firstDate,secondDate){

    //calculate the difference between first date and current date
    firstDifference = new Date() - firstDate;

    //calculate difference between second date and current date.
    secondDifference = new Date() - secondDate;

    //return the smallest value.
    return firstDifference - secondDifference;

});
//display the sorted array.
alert(birthdates);
0
W.K.S 5 Dez. 2013 im 20:07