Forum: PC-Programmierung PHP: Prüfen ob Datum innerhalb 30 Tage liegt.


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Draco (Gast)


Lesenswert?

Ich bin so gerade ein bissle am verzweifeln. :-D

Ich habe ein Datum in einer SQL liegen im Format DATE mit z.b. 
2020-01-24. Nun möchte ich dieses Datum prüfen, ob es in den nächsten 30 
Tagen ist.

Ich scheitere aber :-D
1
if( strtotime($row['prüftermin']) > strtotime('-30 days') ) 
2
{
3
   echo "Innerhalb 30 Tage";
4
} else {
5
            
6
   echo "Nicht innerhalb 30 Tage";
7
}

Mit obigen Code zeigt er mir alle Daten innerhalb der Range, obwohl die 
Daten noch in 2 Jahren sind etc...

Wo liegt da mein Fehler?

PHP Version ist 7.4.1

von Ingo Less (Gast)


Lesenswert?

Kenne mich in PHP nicht aus, aber in C würde ich es in der Unixzeit 
rechnen.
1
if ( Pruefzeit_Unix < (Jetzt_Unix + 30_Tage_Unix) ){ // Termin innerhalb 30 Tage
2
  // Ja
3
}else{
4
  // Nein
5
}

von Tilo R. (joey5337) Benutzerseite


Lesenswert?

1. Hast du die Ergebnisse der strtotime-Aufrufe mal getestet?

2. "innerhalb" der nächsten 30 Tage bedeutet:
  a) später als jetzt
  UND
  b) früher als in 30 Tagen

Du prüfst vermutlich "später als vor 30 Tagen"



Ich würde das Unix-Datum des Prüftermins in einer Variable speichern, 
die restlichen Vergleiche dann ohne strtotime mit der time()-Funktion 
machen. 30 Tage sind 30*24*3600 Sekunden.

von Einweiser (Gast)


Lesenswert?

Draco schrieb:

> Wo liegt da mein Fehler?

Da:

if( strtotime($row['prüftermin']) > strtotime('-30 days') )

und insbesonders im Argument des rechten strtotime() calls

von Draco (Gast)


Lesenswert?

Einweiser schrieb:
> if( strtotime($row['prüftermin']) > strtotime('-30 days') )
>
> und insbesonders im Argument des rechten strtotime() calls

Der rechte call zeigt mir:
1
unix: 1576652588
2
date: 18/18/2019

ahhhhh........... :-D


ja jetzt kam es mir die Schuppen von den Haaren:
1
if( strtotime($row['prüftermin']) < strtotime("+30 days"))

Manchmal hat man echt so ein Brett vor dem Kopf. Kann ja nicht klappen 
wenn man in die Vergangenheit prüft, weil ja alles in der Vergangenheit 
ist.

So klappt das nun... Danke für deinen Denkanstoß. :-D

von Wilhelm M. (wimalopaan)


Lesenswert?

Draco schrieb:
> Der rechte call zeigt mir:
> unix: 1576652588
> date: 18/18/2019

Glaube ich nicht.

date: 12/18/2019

von Draco (Gast)


Lesenswert?

Wilhelm M. schrieb:
> Draco schrieb:
>> Der rechte call zeigt mir:
>> unix: 1576652588
>> date: 18/18/2019
>
> Glaube ich nicht.
>
> date: 12/18/2019

hab ich fix zu ende geschrieben als es mir in den Sinn kam

von Dirk K. (merciless)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.