Willkommen in der Webstatt Zum Webstatt Blog und Stories
gecko am 25.04.06 09:43

hi

ich such nach einer lösung für eine datums-rechnerei.
in der db ist ein datum (z.b. 28.04.2001). ich möchte nun eine übersichts-seite erstellen bei dem jeder eintrag markiert ist, der (nach tagen) gleich oder weniger als 30 tage vom aktuellen datum entfernt ist, wobei das jahr keine rolle spielt.

beispiel:

db: 23.05.2001
heute: 25.04.2006
= markiert.

db: 29.05.2003
heute: 24.04.2006
= keine markierung

es kommt also nur auf den tag und den monat an. verwendungsmöglichkeit z.b. jahresabo/ erneuerung -> rechtzeitige erinnerung,etc.

kann mir jemand einen tipp geben, wie ich das realisieren soll? datumsformat? date oder timestamp?

wäre für echos dankbar

netcup.de Warum gibt es hier Werbung?
Julian am 25.04.06 10:22

Ich hab leider noch nicht so ganz verstanden was du da vorhast, aber vielleicht helfen dir folgende Tipps weiter:

[dok]mktime[/dok]:
$tag_anfang = mktime(0,0,0,$monat,$tag,$jahr);
$tag_ende = mktime(23,59,59,$monat,$tag,$jahr);


das generiert dir aus einem datum einen unix timestamp. also eine 11-stellige zahl (sekunden seit 1.1.1970 oder so). diese zahlen kannst du prima miteinander vergleichen.
ein tag hat 60*60*24 = 86400 sekunden

eine abfrage könnte dann z.b. so aussehen:

$time = mktime(0,0,0,$monat,$tag,$jahr);
$jetzt = time();

if( ($jetzt - $time) < 86400) {
// $time ist noch keine 24h alt
}


Wenn zu alle Einträge des heutigen Tages aus einer Datenbank auslesen möchtest:

$heute_start = mktime(0,0,0,$monat,$tag,$jahr);
$heute_ende = mktime(23,59,59,$monat,$tag,$jahr);
$result = mysql_query("SELECT * FROM kalender WHERE datum >= '".$heute_start."' && datum <= '".$heute_ende."'") or die(mysql_error());


Wenn du ein Spanne von 20 Tagen hast, dann multiplizierst du die 86400 Sekunden/Tag einfach mit 20.

Das müsste dir schonmal weiterhelfen :)

gecko am 25.04.06 10:42

mit mktime,etc. bin ich auch am rumprobieren. aber nochmals zum erklären:

stell dir vor, du verkaufst abos für eine zeitschrift. wenn du nun über eine administration deine kundenliste betrachtest, siehst du eine markierung bei all den kunden, denen du für die abo-erneuerung wieder eine rechnung senden musst.

und jeweils 30 tage vor ablauf möchtest du die rechnungen versenden.

du hast ein registrierungsdatum der kunden in der db. eines ist z.b. 23.03.2001. also möchtest du jeweils am 23.02. jedes jahres die neue rechnung senden.

ich hoffe, ich konnte es nun klar beschreiben

Julian am 25.04.06 11:29

wenn du das registrierdatum als unix timestamp hast:

$heute = time();
if(date("d", $registrierdatum) == date("d",$heute)) {
//rechnung verschicken
}


mit date("d", $registrierdatum) holt er den tag des registerierdatums aus dem timestamp raus. also z.b. der 23.
mit date("d",$heute) gibt er das datum des heutigen tages an. in dem fall 25.
wenn beide identisch sind, dann geht er in die if-schleife und verschickt die rechnung oder was auch immer

Sven Sven am 25.04.06 14:21

Wenn möglich das Datum dann in ein Feld mit dem Typ DATE bzw. DATETIME speichern und dann WHERE NOW() > datum + INTERVAL 24 HOUR oder sowas halt in deinem SELECT Query.

gecko am 26.04.06 04:32

alles klar,dank euch für's echo!

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt