Also hier ist die Situation. In meiner DB-Tabelle habe ich eine Spalte namens expire_date, in der ich ein bestimmtes Datum für jede Zeile einfüge. Das Verfallsdatum ist beispielsweise der 28.04.2012
Ich brauche einen PHP-Code, der einem bestimmten Benutzer eine Benachrichtigung per E-Mail sendet, dass das bestimmte Ding, das an diesem Datum abläuft, 1 Monat vor dem Ablaufen ist. Wenn also heute der 28.03.2012 ist, bedeutet das, dass es nur noch einen Monat dauert, bis das Ding abläuft. Ich habe dafür keinen Code erstellt, weil ich nicht weiß, wie ich den -1 Monat lösen soll.
$result = mysql_query( 'SELECT * FROM myTable WHERE expire_date BETWEEN NOW AND "' . $myDate . '"' );
Und da haben Sie ein Array mit allen Artikeln, die in weniger als einem Monat ablaufen. Wenn Sie genau die wollen, die in 1 Monat ablaufen:
$result = mysql_query( 'SELECT * FROM myTable WHERE expire_date = "' . $myDate . '"' );
ich hoffe das hilft
@Tales Sie sollten eigentlich in der Lage sein, das gleiche Datum mit 1 weniger date () -Funktion zu erhalten, wie zum Beispiel: date('Y-m-d', strtotime(date('Y-m-d') . ' +1 month'));
– OnethingSimple
15. Juli 2015 um 14:59 Uhr
@Tales Eigentlich denke ich nur echo date('Y-m-d', strtotime('+1 month')); Rechts?
– OnethingSimple
15. Juli 2015 um 15:15 Uhr
Ich bin überrascht, dass diese Antwort hier fehlt:
$oneMonthAgo = new \DateTime('1 month ago');
echo $oneMonthAgo->format('Y-m-d');
Heute ist 2019-01-28. Der obige Code gibt aus 2018-12-28
$WeekAgo = strtotime("-1 week"); //A week before today
$MonthAgo = strtotime("-1 month"); //A month before today
Haltebusch
Vielleicht sollten Sie das in SQL statt in PHP machen, nein?
Wenn Sie in PHP arbeiten möchten, finden Sie hier einen saubereren Weg, als @Expert es sein möchte
$date = new DateTime();//now
$interval = new DateInterval('P1M');// P[eriod] 1 M[onth]
$date->sub($interval);
echo $date->format('Y-m-d');
Benutzer1191247
Wie von @Mikhail hervorgehoben, sollten Sie verwenden = damit Sie den Datensatz nur einmal abrufen. Sie möchten Ihre Benutzer nicht den ganzen Monat lang bis zum expire_date jeden Tag zuspammen –
SELECT *
FROM tbl
WHERE expire_date = CURRENT_DATE + INTERVAL 1 MONTH
Wenn Ihr expire_date einen DATETIME-Wert im Gegensatz zu einem DATE-Wert enthält, sollten Sie so etwas wie – verwenden.
SELECT *
FROM tbl
WHERE expire_date BETWEEN (CURRENT_DATE + INTERVAL 1 MONTH) AND (CURRENT_DATE + INTERVAL 1 MONTH + INTERVAL 1 DAY - INTERVAL 1 SECOND)
Michail
SELECT user, email FROM tbl WHERE expire_date = CURRENT_TIMESTAMP - INTERVAL 1 MONTH
Beachten Sie, dass ich verwende = und nicht weniger als, denn wenn Sie nur vergleichen, dass es weniger als ein Monat ist, dann werden Sie den Benutzern im letzten Monat jeden Tag E-Mails schicken.
Dadurch werden Datensätze ausgewählt, die vor einem Monat abgelaufen sind.