checkdate für Datebank abfrage

Pullmann

Erfahrenes Mitglied
HI Leutz


so ich stehe da vor einem Problem bei einer SQL Abfrage für eine Datumsspalte

man nehme an jemand hat sich am 2005.01.31 registriert der nächste Monat
hat aber nur 30 oder gar 28 Tage.

Meine Abfrage lautete bisher so
PHP:
"LIKE '____-__-".date('d')."%'"

dann werden aber nicht die User mit eingeschlossen bei denen der Tag der 31 ist.

Mein Gedanke war jetzt über checkdate zu prüfen ob date('d')+1 gültig ist, wenn nicht
soll die Abfrage so sein das halt der Tag
PHP:
>= date('d')
sein kann.
aber mit
PHP:
"LIKE '____-__-".>=date('d')."%'"
gehts net.

Wie kann ich das jetzt lösen!?
 
Irgendwie versteh ich nicht was eine Datumsabfrage mit LIKE für einen Sinn machen soll.

< '2005-10-01'
>= '2005-10-01' oder
BETWEEN '2005-09-01' AND '2005-10-01' sollten doch geeignete Ergebnisse liefern

Oder suchst du nach dem Letzten tag des Monats?
DATE_SUB('2005-10-01', INTERVAL 1 DAY)
 
So sehr schlauch werde ich aus deinem Thread auch nicht, vielleicht könntest du nochienmal genauer erklären was du machen möchtest!
 
Das mit dem Between ist das was ich suchte allerdings ist ja mein Problem jetzt das ich das Jahr und den Monat nicht brauche ....

Jedoch kann man Between und Like nicht mischen ....

aber nochmal zum Verständniss

Also das Scipt ist dafür da das immer der Benutzer gesucht wird der sich an diesem Tag registriert hat ...

Wenn er sich also am 2005.10.25 registriert hat muss ich denn immer finden wenn
der 25 Tag im Monat ist und das jeden Monat, also am 2005.11.25 am 2005.12.25 ...

Das Problem ist ja denn aber wenn sich jemand am 31 Tag registriert hat der nächste Monat nur 30 Tage hat ... und er dann nicht mitgenommen wird.

Das ganze dient einer Creditabrechung die halt im Abstand eines Monats durchgeführt wird. Es soll aber nicht so sein das diese Abrechung immer am 1. des Monats ist sondern für jeden User einzeln sein soll je nach Tag der Registrierung.
 
Zuletzt bearbeitet:
Hi!

Nach fünfmaligem Lesen habe ich endlich verstanden was du möchtest.
Mach dir das doch nicht so kompliziert.
Überprüfe doch einfach wieviel Tage der Aktuelle Monat hat, wenn sich der User bspw. am 31 Registriert hat, der aktuelle Monat aber nur 28 Tage hatt, dann setze doch einfach den Tag auf 28. Aber ich würde das nicht mit MySQL sondern erst in PHP machen!
 
:p ok so kann mans machen ... ich habs jetzt einfach so gelöst

PHP:
      $day = date('d')+1;
	if(!checkdate(date('m'),$day,date('Y'))) {
	
		if(date('d') == 28)
			$handle = " OR regdate LIKE '____-__-29%' OR regdate LIKE '____-__-30%' OR regdate LIKE '____-__-31%'";
		else if (date('d') == 30)
			$handle = " OR regdate LIKE '____-__-31%'";
		else if (date('d') == 31)
			$handle = '';
	}
	else
		$handle = "";
 
Zuletzt bearbeitet:
Pullmann hat gesagt.:
Es soll aber nicht so sein das diese Abrechung immer am 1. des Monats ist sondern für jeden User einzeln sein soll je nach Tag der Registrierung.
OK angekommen.
Dann musst du am 1. abchecken ob der vergangene Monat weniger Tage hatte als 31 und ggf. die fehlenden auch noch erfassen.
PHP:
$daylist = "01";
if (date("d")=="01"){
    $gestern = mktime(0, 0, 0, date("m")  , date("d")-1, date("Y"));
    for($i=31;$i>$gestern;$i--){
        $daylist.=",".$i;
    }
}
Die Abfrage lautet dann:
PHP:
"... WHERE DAYOFMONTH(Datum) IN (".$daylist.")"
 
Ganz genau das wollte ich haben !!

Danke

PHP:
$daylist = date('d'); 
	$gestern = date('d',mktime(0, 0, 0, date("m")  , date("d")-1, date("Y"))); 
	if (date("d")=="01"){		
		for($i=31;$i>$gestern;$i--){ 
			$daylist.=",".$i; 
		}
	}
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück