Webstatt.org - Community seit 2006 - 2012 (2024?)

datums-rechnerei

user-186
25.04.2006 07: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

user-210
25.04.2006 08: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."'"zwinkern 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 lächeln

Sie haben soeben die Position Ihres Mauszeigers auf dem Monitor verändert. Bitte starten sie Windows neu damit die Änderungen wirksam werden.
user-186
25.04.2006 08: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

user-210
25.04.2006 09: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

Sie haben soeben die Position Ihres Mauszeigers auf dem Monitor verändert. Bitte starten sie Windows neu damit die Änderungen wirksam werden.
Avatar user-317
25.04.2006 12: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.

user-186
26.04.2006 02:32

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