Ankündigung

Einklappen
Keine Ankündigung bisher.

Termine der nächsten x Tage aus Forenkalender ausgeben

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Termine der nächsten x Tage aus Forenkalender ausgeben

    Hallo alle zusammen,

    ich hoffe, dass ihr mir bei folgendem Problem helfen könnt.

    Das Ziel: Auf der Startseite eines Forums sollen die Termine der nächsten x Tage aus dem Kalender angezeigt werden.

    Das Problem: Ich kann die Daten bei der Datenbankabfrage nicht sortieren, weil das Datum im Format 23-3-2006 gespeichert ist.

    Der erste Versuch funktionierte deshalb nicht:
    PHP-Code:
    <?
        $futuredays = "7";
        $date = mktime(0, 0, 0, date("m"), date("d") + $futuredays, date("Y"));
        $futuredate = date("j-n-Y" , $date);
        $today = date("j-n-Y");
        $query = $db->query("SELECT * FROM ".TABLE_PREFIX."events WHERE private = 'no' AND date <= '".$futuredate."' AND date >= '".$today."' ORDER BY date ASC");
        $comma = "";
        while($events = $db->fetch_array($query))
        {
        $eventdate = explode("-", $events['date']);
        $dateline = mktime(0, 0, 0, $eventdate['1'], $eventdate['0'], $eventdate['2'], 0);
        $nextevents .= $comma."<a href=\"calendar.php?action=event&amp;eid=".$events['eid']."\">".htmlentities($events['subject'])." (".mydate($mybb->settings['dateformat'], $dateline).")</a>";
        $comma = ", ";
        }
        echo $nextevents;
    ?>
    Jetzt hatte ich die Idee (wer weiß obs Sinn macht!?), die Daten erstmal ein ein Array zu packen und dabei die Daten in Unix-Zeit zu konvertieren, so dass ich eine Sortierung vornehmen kann:
    PHP-Code:
    <?
        $query = $db->query("SELECT * FROM ".TABLE_PREFIX."events WHERE private = 'no'");
        
        $i = "1";
        while($events = $db->fetch_array($query))
        {
            $eventdate = explode("-", $events['date']);
            $dateline = mktime(0, 0, 0, $eventdate['1'], $eventdate['0'], $eventdate['2'], 0);
            $event[$i] = array($events['eid'], $events['subject'], $dateline);
            $i++;
        }
    ?>
    Nur jetzt habe ich ein Brett vorm Kopf und weiß nicht weiter. Ist das der richtige Weg? Wie bekomme ich die Termine aufsteigend sortiert und dannach die Termine der nächsten x Tage ausgegeben?

    Vielen Dank vorab!

    Michael

  • #2
    Erste Frage, bevor es weitergeht. In welchem Format liegt das Datum in der Datenbank vor? Als Timestamp oder als String? Wenn das ein Timestamp o.ä. ist, kann man es geschickt mit MySQL-Funktionen einschränken.

    Wenn nicht, dann solltest du es in MySQL umwandeln und dann einschränken, wobei ich dir aber eher (wenn du die Wahl hast) empfehle, das Datum in einem "vernünftigen" Format zu speichern, also entweder als Zahl (Unix-Timestamp) oder als MySQL-Datums-Datentyp...
    [url]www.php-maven.org[/url] PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
    Twitter @ [url]https://twitter.com/#!/mepeisen[/url] und Facebook @ [url]http://t.co/DZnKSUih[/url]

    Kommentar


    • #3
      Das Datum liegt als String vor und das ist mein Problem. Ich kann das auch nicht ändern, da das vom Forum so vorgegeben ist.

      Kommentar


      • #4
        OK. Ums in SQL zu machen, kannst du es erst in ein Unix-Timestamp umwandeln und dann entsprechend XX Sekunden zum Vergleich aufschlagen. Beispiele hierfür findest du hier:
        http://dev.mysql.com/doc/refman/4.1/...functions.html

        Bei grossen Tabellen empfiehlt sich das aufgrund der Performance jedoch nicht, da du keinerlei Indices verwenden könntest. Wenn du es aber nicht ändern kannst... Naja...
        [url]www.php-maven.org[/url] PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
        Twitter @ [url]https://twitter.com/#!/mepeisen[/url] und Facebook @ [url]http://t.co/DZnKSUih[/url]

        Kommentar

        Lädt...
        X