Terminkalender - Monats- bzw. Druckansicht

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Terminkalender - Monats- bzw. Druckansicht

    Hallo alle miteinander!
    ich bastel gerade an einer Druckansicht für einen Terminkalender.
    Diese ist eig. minimalistisch gehalten:
    In der URL manuell das Parameter &print=1 hinzufügen und dann gelangt man zu einer Monats und Jahresauswahl.
    Anschließend sendet man das Formular und es erscheint eine tabellarische Übersicht der Termine in dem ausgewählten Bereich.

    jetzt ist mein Problem die Berechnung des Zeitraums.
    In der DB wird das Datum als Timestamp und nicht als Datum gespeichert (Soll bzw. muss auch so bleiben).
    Hier meine bisherige Formel für die Datumseinschränkung:

    Quellcode

    1. SELECT field1,field2,field3,field4,field5
    2. FROM tx_XXX_entry
    3. WHERE NOT hidden
    4. AND NOT deleted
    5. AND starttime >= ".mktime(0,0,0,1,1,$_GET["year"])."
    6. AND starttime <= ".mktime(0,0,0,12,date("t",mktime(0,0,0,12,0,$_GET["year"])),$_GET["year"])."
    7. ORDER BY starttime ASC


    Diese Formel funktioniert aber teilsweise nicht...
    Ab und zu bekomme ich Einträge aus dem nächste Monat (z.B. Druckansicht Monat Oktober, letzter Termin von 01.12)

    Hat irgendjemand eine geeignete Formel parat, welche diese "falsch" angezeigten Termine komplett ausschließt?
    Ich bin allen Vorschlägen (naja, zumindest fast allen) offen!
    greetz,
    seitz

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von seitz ()

  • wo genau liegt das Problem? Der SQL-Code funktioniert natürlich nur als Einschränkung aufs Jahr und nicht auf den Monat, es kommt ja auch nirgendwo $_GET["month"] oder etwas in der Richtung vor.
    Was die Einschränkung auf ein Jahr angeht, sieht der Code aber vernünftig aus, hat nur ein Problem, wenn ich das richtig sehe: Die Obere Grenze ist der 31.12 um 00:00Uhr, d.h. Termine am 31.12 werden nicht mehr berücksichtigt. Deshalb würde ich mir den Zeitstempel des 1.1. des nächsten Jahres holen und 1 Sekunge abziehen. Also etwas in der Richtung:

    Quellcode

    1. AND starttime <= ".mktime(0,0,-1,1,1,$_GET["year"] + 1)."

    damit sollte dann die Einschränkung bis zum 31.12 um 23:59:59 Uhr gehen.

    Und jetzt noch die Einschränkung auf einen Monat einzuführen sollte kein großes Problem sein, einfach den Monat in der unteren Schranke auf $_GET["month"] setzten und in der oberen Schranke statt "year+1" "month+1" (zusammen mit dem übergebenen Jahr) benutzen.
    Man muss sich bei dem -1 und +1 in mktime übrigens keine Gedanken machen, dass man auf ungültige daten kommt, das rechnet php schon richtig hin.

    PS: Was mir gerade noch aufgefallen ist:

    Quellcode

    1. date("t",mktime(0,0,0,12,0,$_GET["year"]))

    dürfte falsche Ergebnisse liefern, denn wenn man den Tag auf 0 setzt, nimmt mktime als Tag den letzten Tag des Vormonats. daher müsste es heißen:

    Quellcode

    1. date("t",mktime(0,0,0,12,1,$_GET["year"]))

    Aber der Teil wird eh nicht mehr benötigt, wenn man es mit den -1 Sekungen wie oben beschrieben realisiert.
  • mist, ich habe natürlich auch eine druckansicht fürs jahr und hab versehentlich den code genommen...
    hier der aktuelle für den monat:

    Quellcode

    1. SELECT field1,field2,field3,field4,field5
    2. FROM tx_XXX_entry
    3. WHERE NOT hidden
    4. AND NOT deleted
    5. AND starttime >= ".mktime(0,0,0,$_GET["month"],1,$_GET["year"])."
    6. AND starttime <= ".mktime(0,0,0,$_GET['month'],date('t',mktime(0,0,0,$_GET['month'],0,$_GET['year'])),$_GET['year'])."
    7. ORDER BY starttime ASC


    Danke für den Tip mit der Sekunde... muss ich gleich mal testen
    greetz,
    seitz

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von seitz ()

  • Und noch ein Tipp von meiner Seite. Anstatt mit Integern zu rechnen, kannst du einfach vorher alles in ein Datumsformat konvertieren.
    Dazu bietet MySQL die Funktion FROM_UNIXTIMESTAMP, siehe dev.mysql.com/doc/refman/5.1/de/date-and-time-functions.html

    Lösung:

    Quellcode

    1. SELECT field1,field2,field3,field4,field5
    2. FROM tx_XXX_entry
    3. WHERE NOT hidden
    4. AND NOT deleted
    5. AND FROM_UNIXTIME(starttime) >= '2009-01-01'
    6. AND FROM_UNIXTIME(starttime) <= NOW()
    7. ORDER BY starttime ASC
  • Ja so gings natürlich auch, wird da die Uhrzeit auch berücksichtigt?

    Ich habs jetzt so gelöst (Monatsansicht):

    Quellcode

    1. SELECT field1,field2,field3,field4,field5
    2. FROM tx_XXX_entry
    3. WHERE NOT hidden
    4. AND NOT deleted
    5. AND endtime >= ".mktime(0,0,0,$_GET["month"],1,$_GET["year"])."
    6. AND starttime <= ".mktime(0,0,-1,$_GET['month'],date('t',mktime(0,0,0,$_GET['month']+1,0,$_GET['year']))+1,$_GET['year'])."
    7. ORDER BY starttime ASC
    greetz,
    seitz