Datumsberechnung verrechnet sich immer am gleichen Datum

andralin

Erfahrenes Mitglied
Hallo Leute,

vielleicht sieht einer von Euch wo folgender Fehelr her kommt:

Problemstellung:
Für einen Kalender benötige ich eine Funktion die einem Datum eine bestimmte Anzahl von Tagen hinzuaddiert.

Code:
function add_day_to_date($datum, $num_of_days)
{		
        $t = substr($datum,0,2);
        $m = substr($datum,3,2);
        $j = substr($datum,6,4);
        $timestamp=mktime(0,0,0,$m,$t,$j)+($num_of_days*60*60*24);

        return date("d.m.Y",$timestamp);
}

Soweit so gut. Das Script funktioniert.

Aber folgende Anweisungen führen zu einem Fehler der sich immer bei Übergabe des 25.10.xxxx wiederholt.

Code:
        echo add_day_to_date("24.10.2009", 1)."<br>";
        echo add_day_to_date("25.10.2009", 1)."<br>";
        echo add_day_to_date("26.10.2009", 1)."<br>";

die dadurch erzeugte Ausgabe lautet:
Code:
25.10.2009
25.10.2009
27.10.2009

das wäre das richtige Ergebnis gewesen
Code:
25.10.2009
26.10.2009
27.10.2009

Ist das ein PHP Bug oder überseh ich hier einen logischen Fehler?

cu s00n
Andralin!
 
Hi, dein Problem kommt durch eine Zeitumstellung. Denn wenn man mal guckt welche Zeit es an deinem Datum laut Timestamp ist, dann ist es immer 0 Uhr, bis zum 25.10.2009 da ist es dann plötzlich 23 Uhr.

Es müsste also besser funktionieren, wenn du in deiner Funktion noch 60*60*12 addierst, sodass du immer von 12 Uhr ausgehst, dann ist die Zeitumstellung fürs Datum nämlich egal.

mfg.Fide
 
Zuletzt bearbeitet:
Da wär ich ja im leben nich drauf gekommen :)
Aber recht hast du....

Dennoch glaube ich es gibt einfachere Lösungen für dein Problem.
Mit strtotime kommt man in dem Format glaube ich aber nicht so weit... ich überlege nochmal ;)

lg
 
Und so?

PHP:
<?php
function add_day_to_date($datum, $num_of_days)
{		
        $t = substr($datum,0,2);
        $m = substr($datum,3,2);
        $j = substr($datum,6,4);
		$str = $j.'-'.$m.'-'.$t;				
		$timestamp = strtotime($str.' + '.$num_of_days.' days');
        return date("d.m.Y",$timestamp);
}

        echo add_day_to_date("24.10.2009", 1)."<br>";
        echo add_day_to_date("25.10.2009", 1)."<br>";
        echo add_day_to_date("26.10.2009", 1)."<br>";

[phpf]strtotime[/phpf]

Übrigens finde ich deine Mischung aus Deutsch und Englisch bei der Benennung von Variablen und Parametern grausam ;)
 
Hi, dein Problem kommt durch eine Zeitumstellung. Denn wenn man mal guckt welche Zeit es an deinem Datum laut Timestamp ist, dann ist es immer 0 Uhr, bis zum 25.10.2009 da ist es dann plötzlich 23 Uhr.

Es müsste also besser funktionieren, wenn du in deiner Funktion noch 60*60*12 addierst, sodass du immer von 12 Uhr ausgehst, dann ist die Zeitumstellung fürs Datum nämlich egal.

mfg.Fide

Ich übergebe aber immer nur das datum, dann wird die zeit immer mit 0:0:0 übergeben und das plus 24:00 ist der nächste tag um 00:00:00.

Aber das Beispiel vom nachfolgenden Kollegen funktioniert.

DANKE Dir für Deine Hilfe.
 
Und so?

PHP:
<?php
function add_day_to_date($datum, $num_of_days)
{		
        $t = substr($datum,0,2);
        $m = substr($datum,3,2);
        $j = substr($datum,6,4);
		$str = $j.'-'.$m.'-'.$t;				
		$timestamp = strtotime($str.' + '.$num_of_days.' days');
        return date("d.m.Y",$timestamp);
}

        echo add_day_to_date("24.10.2009", 1)."<br>";
        echo add_day_to_date("25.10.2009", 1)."<br>";
        echo add_day_to_date("26.10.2009", 1)."<br>";

[phpf]strtotime[/phpf]

Übrigens finde ich deine Mischung aus Deutsch und Englisch bei der Benennung von Variablen und Parametern grausam ;)

JO T: und der Kollege vor Dir hat ansatzweise eine Erklärung geliefert wo der Fehler her kommt.

Englisch/Deutsch: ja ich finds auch wiederlich. Das Problem, mal schreib ich viel englisch mal viel deutsch und das wirkt sich auch auf meine VARS aus... Ich gelobe Vesserung. *lächel*

Danke!
 
Zurück