PHP Datum Unterschied in tage berechnen

hallo

wie kan ich mir die tage bis zu einem bestimmten datum mit php berechnen lasen?

ich will das ich die tage bis zum 20.01.2009 angezeigt bekomme

geht das wen ja wie

danke im vorraus

bosz4

mach aus beiden daten nen timestamp mit mktime oder benutzt strftime()
schau dir einfach dir funktionen mal bei php.net an

ok ich bin jetzt so weit dass er mir die Sekunden bis zu dem Tag anzeigt. Aber ich krieg das einfach nicht in Tage umgewandelt. Wie geht das?

sekunden durch 60, durch 60 durch 24 = tage

gut und wie krieg ich noch die nachkommastellen weg?

Man hätte auch einfach bei wikipedia nachgucken können, wenn
man das nicht selber rechnen kann, der Tag als Zeiteinheit ist
definiert als 86400s.

Tage im Kalender können bei einem bestimmten Datum auch
mal eine Sekunde mehr (oder weniger, was bislang nicht vorkam)
haben, kann man aber für die weitere Zukunft nicht sagen, welche
Tage das sind, nur bei welchen das passieren könnte).

Nachkommastellen weg/runden heißt ‘round’ (Funktion bei PHP)

Das geht aber leider nicht. :frowning:

Aber ich will nur die nachkommastellen weg haben, nichts runden, sonst stimmt es nicht mehr.

was stimmt oder nicht, ist ja eine Frage nach der inhaltlichen
Bedeutung, kannst ja gucken, ob floor oder ceil mehr deinen
Erwartungen entspricht, das ist ab- oder aufrunden ;o)

das geht nicht die Zahl bleibt wie sie ist.

Schau dir mal die Funktionen und Beispiele durch : at2.php.net/manual/de/ref.datetime.php :wink:

PS: Nachkommastellen kannst du mit einem Typecast auf int entfernen:

$zahl = 35.924524;
$zahl = (int) $zahl;
echo $zahl;

Dann handelt es sich vermutlich auch nicht um eine Zahl mit
Nachkommastellen - oder du hast die falsche Funktion verwendet.
;o)

hier der gesamte code.
ich habe angenommen, das du die noch verbleibenden tage bis zum 20.01 anzeigen lassen willst.
code ist wie immer ungetestet und ohne gewähr :ps:

$bistagx = mktime(0,0,0,01,20,2009);

$vontagx = mktime(); // fehlende angeben werden durch aktuelle werte ersetzt
// differenz errechnen

$differenz = $bistagx - $vontagx;
$diff_in_days = int($differenz / 86000);

//ausgabe

echo "Tage bis zum 20.11.: $diff_in_days";

Edit: wie wccw im nachfolgenden Beitrag sagt, muss da natürlich floor() statt int() stehen (oder vll sogar intval() )

[quote=“hoffmann”]Man hätte auch einfach bei wikipedia nachgucken können, wenn
man das nicht selber rechnen kann, der Tag als Zeiteinheit ist
definiert als 86400s.[/quote]

zum selber nachrechnen: 60 * 60 * 24

[quote=“Linux Shell”]balmung@ikarus:~$ bc -q
606024
86400[/quote]

mfg Balmung

int() ?
Du meinst wohl floor().

nein, ich meinte intval().
sorry! :hail: :hail:

Jau, die Funktion gibt’s ja auch noch. :astonished: :smiley:

und noch vile mehr, von denen wir noch nichts gehört haben^^ :ps:

funktioniert der code denn jetzt?

$d='20.01.2009'; $t=date_parse($d); $end_timestamp=mktime (0,0,0,$t['month'],$t['day'],$t['year']); $diff = ($end_timestamp - time()) / 86400; $fertig=explode('.',$diff); echo "Noch $fertig[0] Tage bis zum $d<br />";

warum nimmst du ausgerechnet die schlechteste Möglichkeit um auf eine Ganzzahl zu kommen?
Du machst aus einem Float einen String, aus dem ein Array, und von dem benutzt du nur einen Teil…

$diff  = intval(($end_timestamp - time()) / 86400);
echo "Noch  $diff  Tage bis zum $d<br />";
$diff  = (int)(($end_timestamp - time()) / 86400);
echo "Noch  $diff  Tage bis zum $d<br />";
$diff  = floor(($end_timestamp - time()) / 86400);
echo "Noch  $diff  Tage bis zum $d<br />";

Natürlich funktioniert es auch so:

[quote]$d=‘20.01.2009’;
$t=date_parse($d);
$end_timestamp=mktime (0,0,0,$t[‘month’],$t[‘day’],$t[‘year’]);
$diff =(int)(($end_timestamp - time()) / 86400);
echo “Noch $diff Tage bis zum $d
”;
[/quote]

Der vorher vorgestellte Code ist nicht der schlechteste, nach einer Schleife von 100000 ergaben sich gerade mal Differenzen von 0,0001 Sekunden und Kümmelstückchen also absolut nicht der Rede wert.

Der vorherige Code macht aber deutlich worum es geht.

Und er ist bislang der einzige gebrauchsfähige da man nur noch die Variable $d füllen muss, allerdings läuft er wegen date_parse erst ab PHP 5, was hier kein Problem darstellt.

Man könnte noch eine Abfrage rein bringen, wenn $end_timestamp kleiner ist als time().

Das sind Lösungsangebote und keine Fummeleien.