date() - mktime() Problem - 1969 ?!

NetPerformance

Erfahrenes Mitglied
Hallo

Meine Methode zieht von einem bestimmten Datum z.B. 23.07.1975 3-Tage ab.

z.B. 23.07.1975 minus 3 --> 20.07.1975

Das Ganze funktioniert ohne Probleme bis 1970..
Falls ich jedoch als Geburtsjahr 1969 eingebe, erhalte ich folgende Fehlermeldung : Warning: date() [function.date]: Windows does not support dates prior to midnight (00:00:00), January 1, 1970

Da diese UNIX Umrechnung erst ab 1970 berechnet wird, wird diese Fehlermeldung ausgegeben..

Meine Frage: Wie würdet Ihr das Problem beheben ?! Gibt es eine Weitere Methode um solch eine Berechnung durchzuführen ?

Gruß
Aaron

Code:
	$tag    = 23; 
    $monat  = 7;
	$jahr   = 1975;
	$abzug  = 3;
	$myGeburtstag = ("$jahr-$monat-$tag"); 
	
	echo "abzug: $abzug<p>";
	echo "geburtstag: $myGeburtstag<p>";
	
	// Zeitumrechnung für die Benachrichtigung - Das neue Datum wird in datumneu abgespeichert
	function Geburtstagsbenachrichtigung($_jahr, $_monat, $_tag, $_abzug)
    {		
		$datum = mktime (0,0,0,$_monat,$_tag,$_jahr);
		$datumneu = $datum - $_abzug * 60*60*24;

        return $datumneu;
    }                             
  
    $benachrichtigung = Geburtstagsbenachrichtigung($jahr, $monat, $tag, $abzug);
    $datumneu = date("Y-m-d", $benachrichtigung);
	
	echo "benachrichtigung: $benachrichtigung<p>";
	echo "datuneu: $datumneu<p>";
 
Das ist ganz normal.
Die UNIX-Timestamps beginnen erst ab 1.1.1970.
Du kannst dann die Standart-Funktionen nicht mehr verwenden.
 
Genau das habe ich selber bereits festgestellt.. !

"Da diese UNIX Umrechnung erst ab 1970 berechnet wird, wird diese Fehlermeldung ausgegeben.. "

Meine Frage :

"Wie würdet Ihr das Problem beheben ?! Gibt es eine Weitere Methode um solch eine Berechnung durchzuführen ?"

Gruß
Aaron
 
Mit MySql....
PHP:
<?php
    function Geburtstagsbenachrichtigung($_jahr, $_monat, $_tag, $_abzug)
    {
        $sql=mysql_query("SELECT DATE_SUB('$_jahr-$_monat-$_tag',INTERVAL $_abzug DAY) as datumneu");
        $res=mysql_fetch_object($sql);
        return $res->datumneu;
    }
?>
 
Ich bin gerade an einer Idde dran.
Jedes 4. Jahr ist ein Schaltjahr.
Mit diesem Ansatz muss ich jetzt noch Funktionen für dich machen...
Ich bleib aber dran...

edit:
Ich hab die Funktion jetzt fertig.
Die Idee dahinter:
Jedes Jahr, das durch 4 restlos Teilbar ist, ist ein Schaltjahr.
2000 z.B. ist ein Schaltjahr.
Es wird jetzt die Zahl der Jahre ermittelt, die das letzte Schaltjahr vom übergebenen Datum her ist.
Das Jahr 2000 wird von den Timestamp-Funktionen unterstützt.
Es wird jetzt also als Jahr zur Berechnung des Tages einfach das Jahr 2000 + X angenommen und die drei Tage abgezogen.
Danach werden vom neu bekommenen Jahr (2000 + X) abgezogen.
Man erhält jetzt also eine 0 oder eine -1.
Diese jetzt noch zum ürsprünglichen Jahr addieren und somit müsste das berechnete Datum stimmen.

hier die Funktion:
PHP:
function threedaysbefore($year, $month, $day)
{
	$to_feb29 = $year % 4;
	$tstamp = mktime(0, 0, 0, $month, $day, 2000 + $to_feb29);
	$tstamp -= 60 * 60 * 24 * 3;
	$new_year = $year + (date("Y", $tstamp) - (2000 + $to_feb29));
	$new_month = date("m", $tstamp);
	$new_day = date("d", $tstamp);
	return Array("year" => $new_year, "month" => $new_month, "day" => new_day);
}
 
Zuletzt bearbeitet:
Hallo!

Probier das hier mal, das dürfte eigentlich funktionieren.

redlama

$month = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
$tag = 23;
$monat = 7;
$jahr = 1975;
$abzug = 3;
$myGeburtstag = ("$jahr-$monat-$tag");

echo "abzug: $abzug<p>";
echo "geburtstag: $myGeburtstag<p>";

$date = $tag." ".$month[$monat - 1]." ".$jahr;
$datum = strtotime("$date -$abzug days");

$datumneu = date("Y-m-d", $datum);

echo "datuneu: $datumneu<p>";
 
@redlame: mein Programm funktioniert bereits.. aber nur ab 1970 .. trag bei dir als Jahr ($jahr = 1955), dann wirst du das gleiche problem haben.

@Daxi: sorry.. steige bei dem programm nicht durch .. aso.. @german hat recht .. ich glaube .. du musst 3 bedingungen erfüllen .. werde mir das programm aber nochmal genauer anschauen :)

@fatalus: mein problem ist das eintragen des datums in der datenbank.. ich habe ein formular .. unser gibt jahr/monat/tag ein z.b. 11.02.1930.. anschliessend soll das ganze in der datenbank abgespeichert werden. gleichzeitig wird von 11.02.1930 3 tage abgezogen .. also 08.02.1930 und auch in der datenbank gespeichert.

gruß
aaron
 
Nur mal so, wenn ich den 20.07.1955 angebe, dann kommt das als Anzeige:

abzug: 3

geburtstag: 1955-7-20

datuneu: 1955-07-17

redlama

P.S. Dei Problem sollte also eigentlich mit meinem Code gelöst sein.
 
Original geschrieben von redlama
Nur mal so, wenn ich den 20.07.1955 angebe, dann kommt das als Anzeige:

abzug: 3

geburtstag: 1955-7-20

datuneu: 1955-07-17

redlama

P.S. Dei Problem sollte also eigentlich mit meinem Code gelöst sein.

huhu..

ich erhalte diese fehlermeldung:

Warning: date() [function.date]: Windows does not support dates prior to midnight (00:00:00), January 1, 1970 in C:\apachefriends\xampp\htdocs\test.php on line 15
datuneu

ich hoffe, dass ich etwas falsch verstanden habe und das programm funktioniert :)

text.php
----------

Code:
<?php
$month = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
$tag = 23;
$monat = 7;
$jahr = 1955;
$abzug = 3;
$myGeburtstag = ("$jahr-$monat-$tag");

echo "abzug: $abzug<p>";
echo "geburtstag: $myGeburtstag<p>";

$date = $tag." ".$month[$monat - 1]." ".$jahr;
$datum = strtotime("$date -$abzug days");

$datumneu = date("Y-m-d", $datum);

echo "datuneu: $datumneu<p>";
?>

gruß
aaron
 
Zurück