Home | Registrieren | Einloggen | Suchen | Aktuelles


Forum » PHP & MySQL » php mit datum rechnen Antworten
php mit datum rechnen

svenolo
Pixelschubser


Beiträge: 5


hallo, ich habe folgendes problem. wahrscheinlich ganz simple zu lösen.

ich lese aus einer datenbank ein datum aus und möchte zu diesem datum genau zwei jahre addieren. wenn ich nun zu dem datum ganz simpel zwei addiere, schreibt er mir nur das jahr plus zwei jahre hin und läßt den monat und den tag weg.

beispiel:

$datum=2002-03-14;
$ergebnis=$datum+2;

echo ergebnis; // hier kommt dann 2004 heraus!

  Profil   Editieren   Zitieren

Can
Halbgott


Beiträge: 1330


Hää?

$datum=2002-03-14 = 1985!

So gehts (wahrscheinlich sogar noch einfacher):

1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9:
$timestamp=mktime(0,0,0,03,14,2002);

$year=date("Y",$timestamp)+2;
$month=date("m",$timestamp);
$day=date("d",$timestamp);

$timestamp2=date("Y-m-d",mktime(0,0,0,$month,$day,$year));

echo $timestamp2;


Can

---
"S-púrlawits'chkâ A-ngáse gûrewüdíx" - Zaphrot Bibelprox

  Profil   E-Mail   Editieren   Zitieren

svenolo
Pixelschubser


Beiträge: 5


das ist ein kaufmännisches datum statt 14.03.2002 lautet es 2002-03-14

ja ist ganz nett deine lösung, aber du musst bedenken, ich habe das datum als stück!
das heißt ich ziehe es komplett aus der datenbank heraus! wie bekomme ich tag, monat und jahr aus der variablen heraus, um sie dann zu verrechnen.

  Profil   Editieren   Zitieren

HG
Posting-Schinder


Beiträge: 520


mit explode. http://www.php.net/exlpode Da ist es recht gut beschrieben. (Ich kann mir die Parameterreihenfolge einfach nicht merken )

---
www.kuminatano.de

  Profil   E-Mail   Website   Editieren   Zitieren

redled
Pixelschubser


Beiträge: 1


ganz einfach

entweder über SQL-Query -->

select DATE_ADD('2004-02-10', INTERVAL '2' YEAR);

Anstelle des Datumswertes steht dan der Spaltenname!

oder mit PHP:

$datum = "2004-02-10";
list ($jahr, $monat, $tag) = explode ("-", $datum);
$tstamp = mktime(date("H"),date("i"),date("s"),date($monat),date($tag),date($jahr)+2);
$adddatum = date("d:m:Y",$tstamp); // errechnetes Jahr

--> sollte gehen , evtl hab ich beim mktime() Tag und Monat vertaucht*grübel*

  Profil   E-Mail   Editieren   Zitieren

skc.tiddy
Otto-Normal-Poster


Beiträge: 81


würde ja im sql_query empfehlen...ist einfacher und edler ;)

---
...blah.

  Profil   Website   Editieren   Zitieren

TeX
Feiertags-Poster


Beiträge: 30


1:
$neue_zeit=mktime(date("H",$date_db),date("i",$date_db),date("s",$date_db),date("m",$date_db),date("d",$date_db),date("Y",$date_db)+2);

  Profil   E-Mail   Website   Editieren   Zitieren

raiserle
Fachidiot


Beiträge: 144


warum immer explode....
mit regex ist die verarbeitung viel schneller
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12:
<?php
$dein_datum="2006-08-23";    // was halt aus der db kommt
                                            // ich habe berücksichtigt, 
                                            //jahr auch 2stelig monat und tag 1 stellig
preg_match("#([0-9]{2,4})-([0-9]{1,2})-([0-9]{1,2})#si",$dein_datum,$treffer);

print_r($treffer);
// indize 0 -> gibt den kompletten string zurück
// indize 1 -> jahr
// indize 2 -> monat
// indize 3 -> tag
?>

nun kannste ja zu $treffer[1]+2 addieren und es kommt das selbe wie bei den anderen
raus. aber sollte es nochmals gesagt sein, regex ist schneller als explode, str_replace
usw...
--- edit
hab ich übelesen, ja in der sql spart er noch mehr zeit, wenn er es dort macht, dann muss aber das feld schon als date gekennzeichnet sein, oder irre ich da? wenn es varchar ist, sollte es da auch gehen? hab das noch nie probiert.
kann ja mal wer seine erfahrung sagen...

1: 
2: 
3:
<?php
$result=mysql_query("SELECT SUM(YEAR + 2) AS jahradd,YEAR AS jahr, MONTH AS monat, DAY AS tag FROM <tabelle> WHERE <bedingung>");
?>


gruß raiserle

---
Irren is Menschlich

Wer andern eine Grube gräbt,
sollte darüber nachdenken,
ob sie tief genug ist!!!!

Kameradschaft ist, wenn der
Kamerad schafft !!!!

Diese Nachricht wurde geändert von: raiserle
  Profil   E-Mail   Website   Editieren   Zitieren
 

Antworten
Nach oben