[PHP] Drei Monate vom aktuellen Datum abziehen

Sandro Feuillet

Legendäres Mitglied
Hi zusammen

Wie zieht man am einfachsten exakt drei Monate vom aktuellen Datum ab?
Ich habe folgende Lösung:

CODE
<?php
$d = date("d");
$m = date("m");
$m = ($m - 03);
$Y = date("Y");
echo "<br>".$d."/".$m."/".$Y;
?>



Wobei die spätestens im nächsten Januar kein korrektes Ergebnis mehr liefert, da negativ.
Zudem fällt die führende "0" beim Monat weg, falls der einstellig ist.
Wie wird das besser gelöst?

Gruss Sandro
 
Hm, elegante Lösung hab ich grad nicht (aber irgendwas gabs da, muss mal in meinen Skripten suchen...).
Aber sonst einfach noch:
CODE
<?php
$d = date("d");
$m = date("m");
$m = "0". ($m - 3); // da Monat immer einstellig, bei negativen Wert fällt 0 später weg
$Y = date("Y");

if( $m < 0 )
{
   $m = 12 + $m;
   $Y = $Y - 1;
}
echo "<br>".$d."/".$m."/".$Y;
?>
 
QUOTE (Sandro Feuillet @ Di 5.7.2005, 9:03)[...]
Wie zieht man am einfachsten exakt drei Monate vom aktuellen Datum ab?
Ich habe folgende Lösung:
[...]


Hallo,

kommt auf die Speicherung deiner Datumsangabe an und ob du kaufmännische Monate haben möchtest oder genau die entspechenden Monate zu vor.


Mal so ein kleines Script nach deiner vorgegangen Überlegung (keine kaufmännischen Monate):

CODE


# $d -> Tage
# $m -> Monate
# $y -> Jahre

if( $m > 3 ) {
  $m -= 3;
} elseif( $m <= 3 ) {
  $y--;
  $m += 9; # minus der 3 Monate
}

echo $d . '/' . $m . '/' . $y;






MfG Sascha Ahlers
 
Hi Sandro,

CODE
<?php
$dreimonate = mktime(0, 0, 0, date("m")-3, date("d"), date("Y"));
echo date("d.m.y", $dreimonate);
?>



Du erzeugst einen Timestamp per mktime. Nach PHP Doku werden auf diese Weise auch Schaltjahre, Sommerzeit etc. berücksichtigt.
Dann mit date wieder ausgeben.

Tim
 
Geht auch mit strtotime:

CODE
$timestamp = strtotime("-3 months");
$stichtag = date("Y-m-d", $timestamp);

 
QUOTE (magadoo @ Di 5.7.2005, 10:32) Geht auch mit strtotime:


CODE
$timestamp = strtotime("-3 months");
$stichtag = date("Y-m-d", $timestamp);



Wow, das scheint die "einfachste" Lösung zu sein.

Vielen Dank allen für die prompte Hilfe.

Gruss Sandro
 
Wie definierst du denn "exakt 3 Monate"?

Ist das wirklich einfach nur Monat-3 ? oder eher 90 Tage zurück?
Was ist das Resultat für den 30. Mai?
 
QUOTE (PH @ Mi 6.7.2005, 8:34) Wie definierst du denn "exakt 3 Monate"?

Ist das wirklich einfach nur Monat-3 ? oder eher 90 Tage zurück?
Was ist das Resultat für den 30. Mai?

Ich glaube, dies habe ich bereits weiter oben angesprochen, es scheint aber nicht wirklich von interesse zu sein.


MfG Sascha Ahlers
 
QUOTE (PH @ Mi 6.7.2005, 9:34) Wie definierst du denn "exakt 3 Monate"?

Ist das wirklich einfach nur Monat-3 ? oder eher 90 Tage zurück?
Was ist das Resultat für den 30. Mai?

Man kann es einfach ausprobieren:

CODE echo date("d.m.y", mktime(0, 0, 0, 2, 30, 2005));

ergibt: 02.03.05
 
Zurück
Oben