php erhält Datum -1 Monat

Lesezeit: 3 Minuten

gogus Benutzeravatar
gogu

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.

Benutzer-Avatar von Expert wanna be
Experte sein möchte

echo strtotime("-1 day"); //1332864156
echo date("y-m-d",strtotime("-1 day")); // 12-03-27

http://us2.php.net/manual/en/function.strtotime.php

Holen Sie sich zuerst das Datum in einem Monat mit PHP:

$myDate = date("Y-m-d", strtotime( date( "Y-m-d", strtotime( date("Y-m-d") ) ) . "+1 month" ) );

Dann können Sie eine Auswahl treffen:

$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

Hier ist es live zum Spielen: http://sandbox.onlinephpfunctions.com/code/ad457f441719c6b9f68dc646445aac86a3f7f7a0

  • Danke John, das ist imo die beste Antwort.

    – mholubowski

    7. Mai 2020 um 19:25 Uhr

Benutzeravatar von SudarP
SudarP

Einfach ;

    $WeekAgo = strtotime("-1 week"); //A week before today
    $MonthAgo = strtotime("-1 month"); //A month before today

Benutzeravatar von haltabush
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');     

Benutzeravatar von user1191247
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)

Mikhails Benutzeravatar
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.

    – Alex Howansky

    28. März 2012 um 16:05 Uhr

1448630cookie-checkphp erhält Datum -1 Monat

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy