tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
13
ZUGRIFFE
2850
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Nov 2002
    Beiträge
    983
    Hallo!

    ich habe ein Online-Adressbuch geschrieben. Es werden dort Adressen und andere pers. Angaben in einer Datenbank gespeichert; ua auch die Geburtsdaten.
    Ich möchte nun die Geburtstage, die sagen wir 10-20 Tage vom aktuellen Datum weg liegen, anzeigen. Da die Daten im "normalen" Format (also zB 01.01.1970) in der Datenbank stehen, müssen sie evtl erst noch umgerechnet werden.
    Ich leider keine Ahnung wie das Ganze realisieren soll, daher wäre ich für einen Denkanstoß sehr dankbar.
     

  2. #2
    Registriert seit
    Feb 2002
    Beiträge
    144
    Also vom Prinzip her ist das relativ simpel denke ich.
    Du nimmst den aktuellen Timesamp und den Timestamp von in 10-20 Tagen (time()+60*60*24*10) und guckst eben ob der Timestamp vom Geburtstag dazwischen liegt, wenn ja zeigst du das Datum an oder nicht.
    Funktionen die dir dabei helfen könnten sind
    www.php.net/time
    www.php.net/mktime

    Es wäre evtl. aber besser wenn der Geburtstag in einem Timestamp in der Datenbank steht und man nur die ausliest die im passenden Zeitraum liegen,
     

  3. #3
    Registriert seit
    Nov 2002
    Beiträge
    983
    Hallo!
    ich glaube ich brauche noch mehr schützenhilfe, weil ich irgendwie einen denkfehler mache. ich habe das jetzt so gemacht:
    Ich hole das Datum aus der DB und wandle es in eine timestamp um.
    Dann hole ich mit time() die aktuelle Timestap und nehme sie mit 60*60*24*10 mal.
    Und hier hört es bereits auf. So sind nach Differenzbildung beispielsweise bis zum 1.12. 10 Tage. das kann ja irgendwie nicht sein.
     

  4. #4
    Registriert seit
    Dec 2001
    Ort
    Hannover
    Beiträge
    4.234
    Die aktuelle Timestamp wird ja auch nicht mit 60*60*24*10 malgenommen, sondern timstamp PLUS 60*60*24*10 (also timestamp + 864000).
    Wenn Du das multiplizierst landest du verdammt weit in der zukunft bzw. an der Grenze des Betriebssystems (bei unix nicht, aber bei Windows z. B).
     
    Copy for free - Yet another page for free software with soures:
    • BitUnlocker (Automatic unlock multiple Bitlocker secured drives - if you use the same password)
    • W7 ScrollZoom (Use Windows 7 zoom tool through your mouse wheel)
    • AppStarter (Somewhat like PortableApps launcher)
    • QuakeConsole (Show/Hide windows console with your tilde key)
    • BetterFileRenamer (Simple file renamer that adds date and version)
    .... more to come

  5. #5
    Registriert seit
    Nov 2002
    Beiträge
    983
    Meinte ich ja Ich addiere das natürlich. Trotzdem kommt Unsinn heraus. Könnte mir nochmal jemand sagen, was _konkret_ ich wie rechnen muss? Muss ich auch das Jahr mit einbeziehen?
    Vielen Dank!
     

  6. #6
    Registriert seit
    Feb 2002
    Beiträge
    144
    Also mein vorheriger Vorschlag war ein bischen undurchdacht, denn der Timestamp von Geburtstag liegt logischer weise vor dem heutigen Datum und würde somit überhaupt nicht angezeigt werden.

    PHP-Code:
    $geburtstag // in dieser Variable ist der Geburtstag gespeichert (z.b. 01.01.1970)
    $tage 10// in $tage wird der Zeitraum von jetzt an festgelegt
    $jetzt time();
    $spaeter $jetzt+60*60*24*$tage
    $geb 
    explode(".",$geburtstag);  // Das Datum des Geburtstages wird aufgeteilt
    $geb_timestamp mktime(0,0,0,$geb[1],$geb[0],date("Y"));  // Der Timestamp des Geburtstages in diesem Jahr wird erstellt
    if (($jetzt $geb_timestamp) && ($spaeter $geb_timestamp)) echo $geburtstag."<br />"
    Das dürfte so in etwa funktionieren.
     

  7. #7
    Registriert seit
    Nov 2002
    Beiträge
    983
    alles klar. vielen Dank - das !
     

  8. #8
    Rosti Rosti ist offline Mitglied Silber
    Registriert seit
    May 2004
    Ort
    München
    Beiträge
    54
    ICh habe da mal eine frage da ich es so nicht hin bekommen kann man das nicht mit hilfe von z.b.:

    PHP-Code:
    WHERE bday date_add(current_dateinterval +14 day
    oder so? Weil ich es sonst nicht hinbgekomme
     

  9. #9
    Avatar von Karl Förster
    Karl Förster Karl Förster ist offline Mitglied Platin
    Registriert seit
    Feb 2001
    Ort
    München
    Beiträge
    646
    Ich hab vor ca. 2 Wochen auch an dem Problem gesessen. In meiner Datenbank ist das Geburtsdatum als DATE, also in der Form YYYY-MM-DD gespeichert. Aufgabenstellung war an meiner Seite: Erstelle 1 SQL-Anweisung, die die Id, Nickname, das neue Alter desjenigen, das Geburtsdatum selbst und das Datum, an dem derjenige als nächstes Geburtstag hat innerhalb eines frei zu definierenden Zeitraums filtert.

    Folgende Anweisung funktioniert bei mir um z.B. alle Leute zu filtern, die inkl. heute und der nächsten 2 Monate Geburtstag haben:
    PHP-Code:
    SELECT 
      Id

      
    Nickname,
      IF ((
    YEAR(CURRENT_DATE) - YEAR(Geburtsdatum)) > 0
        (
    YEAR(CURRENT_DATE) - YEAR(Geburtsdatum)) - (MID(CURRENT_DATE65) < MID(Geburtsdatum65)),
        IF ((
    YEAR(CURRENT_DATE) - YEAR(Geburtsdatum)) < 0
          (
    YEAR(CURRENT_DATE) - YEAR(Geburtsdatum)) + (MID(Geburtsdatum65) < MID(CURRENT_DATE65)), 
          (
    YEAR(CURRENT_DATE) - YEAR(Geburtsdatum))
        )
      ) +
    AS `alter`, 
      
    Geburtsdatum
      
    DATE_FORMAT(DATE_ADD(GeburtsdatumINTERVAL 
        
    IF ((YEAR(CURRENT_DATE) - YEAR(Geburtsdatum)) > 0
          (
    YEAR(CURRENT_DATE) - YEAR(Geburtsdatum)) - (MID(CURRENT_DATE65) < MID(Geburtsdatum65)),
          IF ((
    YEAR(CURRENT_DATE) - YEAR(Geburtsdatum)) < 0
            (
    YEAR(CURRENT_DATE) - YEAR(Geburtsdatum)) + (MID(Geburtsdatum65) < MID(CURRENT_DATE65)), 
            (
    YEAR(CURRENT_DATE) - YEAR(Geburtsdatum))
          )
        ) +
    1YEAR), '%Y-%m-%d') AS zeit
    FROM tabelle
    WHERE
      
    (CONCAT(YEAR(NOW()), '-'DATE_FORMAT(Geburtsdatum'%m-%d')) >= DATE_FORMAT(CURRENT_DATE'%Y-%m-%d'))
      AND
      (
    CONCAT(YEAR(NOW()), '-'DATE_FORMAT(Geburtsdatum'%m-%d')) <= DATE_FORMAT(DATE_ADD(CURRENT_DATEINTERVAL 2 MONTH), '%Y-%m-%d'))
      )
      OR 
      ((
    CONCAT(YEAR(NOW()) +1'-'DATE_FORMAT(Geburtsdatum'%m-%d')) >= DATE_FORMAT(CURRENT_DATE'%Y-%m-%d'))
      AND 
      (
    CONCAT(YEAR(NOW()) +1'-'DATE_FORMAT(Geburtsdatum'%m-%d')) <= DATE_FORMAT(DATE_ADD(CURRENT_DATEINTERVAL 2 MONTH), '%Y-%m-%d'))
      )
    ORDER BY zeit ASC 
    Tschuldigung .... die Abfrage is nunmal so lang
     
    MfG

    Karl Förster
    Entwicklung / Development
    Appia, Inc.


    appia.com

  10. #10
    Rosti Rosti ist offline Mitglied Silber
    Registriert seit
    May 2004
    Ort
    München
    Beiträge
    54
    Nun ja genau das Problem habe ich ja das es als DATE gespeichert ist werde deins also mal ausprobieren
     

  11. #11
    Rosti Rosti ist offline Mitglied Silber
    Registriert seit
    May 2004
    Ort
    München
    Beiträge
    54
    Das geht ja wirklich :-o

    DANKE
     

  12. #12
    Avatar von dkf
    dkf dkf ist offline Mitglied Gold
    Registriert seit
    May 2004
    Ort
    Hamburg
    Beiträge
    127
    Zitat Zitat von SepteraCore
    Also mein vorheriger Vorschlag war ein bischen undurchdacht, denn der Timestamp von Geburtstag liegt logischer weise vor dem heutigen Datum und würde somit überhaupt nicht angezeigt werden.

    PHP-Code:
    $geburtstag // in dieser Variable ist der Geburtstag gespeichert (z.b. 01.01.1970)
    $tage 10// in $tage wird der Zeitraum von jetzt an festgelegt
    $jetzt time();
    $spaeter $jetzt+60*60*24*$tage
    $geb 
    explode(".",$geburtstag);  // Das Datum des Geburtstages wird aufgeteilt
    $geb_timestamp mktime(0,0,0,$geb[1],$geb[0],date("Y"));  // Der Timestamp des Geburtstages in diesem Jahr wird erstellt
    if (($jetzt $geb_timestamp) && ($spaeter $geb_timestamp)) echo $geburtstag."<br />"
    Das dürfte so in etwa funktionieren.
    Habs getestet: klappt!

    Aber was macht PHP eigendlich, wenn ich das ganze nicht mit der Funktion DATE, sondern mit der Funktion TIME mache?
    Ich meine, was habe ich für einen Timestamp für den 01.01.1950? Der müsste ja im negativen Bereich liegen, oder? Klappt das so ohne weiteres?
     

  13. #13
    Registriert seit
    Feb 2004
    Ort
    Leinfelden-Echterdingen
    Beiträge
    781
    Nein, das wird nicht klappen. Die MySQL-Abfrage von Karl Förster ist das, was du brauchst.

    mfg
     
    Bitte dran denken!
    Wenn eure Frage geklärt ist, markiert nach eurer Antwort den Thread als erledigt und bewertet die Antworten

  14. #14
    Avatar von Karl Förster
    Karl Förster Karl Förster ist offline Mitglied Platin
    Registriert seit
    Feb 2001
    Ort
    München
    Beiträge
    646
    Wollte nur schnell drauf hinweisen, dass in meiner Lösung noch Fehler drin sind. Jetzt im Praxistest hat sich herausgestellt, dass der heutige Geburtstag zwar angezeigt wird aber mit dem falschen Jahr (nämlich +1). Eine Lösung hab ich bereits fertig, aber ich glaub die wird langsam zu umfangreich um sie hier zu posten. Mich würde interessieren ob es effektivere und leichtere Lösungen gibt.
     
    MfG

    Karl Förster
    Entwicklung / Development
    Appia, Inc.


    appia.com

Ähnliche Themen

  1. Geburtstage Anzeigen
    Von nchristoph im Forum PHP
    Antworten: 8
    Letzter Beitrag: 16.08.08, 05:04
  2. [Access - SQL] Geburtstage
    Von Krausesh im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 15.12.05, 21:36
  3. Die nächsten Geburtstage auslesen
    Von casr im Forum Relationale Datenbanksysteme
    Antworten: 7
    Letzter Beitrag: 27.09.05, 13:28
  4. Nächste Geburtstage ausgeben
    Von dom123 im Forum PHP
    Antworten: 3
    Letzter Beitrag: 04.08.05, 01:30
  5. Abfrage in Access Geburtstage
    Von graf_brainstorm im Forum Office-Anwendungen
    Antworten: 1
    Letzter Beitrag: 26.08.04, 22:30