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?


Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.