Sign in to follow this  
Sandro Feuillet

[PHP] Drei Monate vom aktuellen Datum abziehen

Recommended Posts

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

Share this post


Link to post
Share on other sites
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;
?>

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
Geht auch mit strtotime:

CODE

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

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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?

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this