PHP und das Zeitproblem

Hallo Experten,

wieder mal stehe ich vor einem mehr oder minder kleinem Problem…
Nämlich dem der Datumsflexibilität in php/mysql…

Für meine bisherigen Projekte habe ich eigentlich fast immer den Unix timestamp verwendet… Nun möchte ich aber in einem etwas grösserem Projekt Geburtstage hinterlegen und ich brauche dazu auch das Geburtsjahr…
Das Problem dabei machen die Geburtstage vor 1970… Weil der Unix Timestamp ja bekanntlich erst ab 1.1.1970 zählt und ich davor mit mktime nicht erstellen kann…

Wenn ich aber jetzt auf das Datumsformat (date) zurückgreife, wie kann ich dann damit berechnungen anstellen? Wie addiere ich zu einem Datum möglichst simpel Tage, Monate, Jahre dazu?
Muss ich dazu wirklich jedesmal den Datensatz auslesen, und ein z.b. date(0,0,0,…,x+2); anwenden nur um zu einem Datum etwas dazuzuaddieren?
das php manual scheint da nicht allzuviel dazu herzugeben und mit mysql kenne ich mich nicht sooo gut aus um die Funktionen zu verwenden…

Das einzige was mir noch eingefallen ist wäre es so umzuformatieren, dass es ein Zahlenwert ist, mit dem man weiterrechnen kann… aber naja… zu einem 25. Februar eine Woche dazuzählen ist so ne Sache… (Schaltjahr) und die umrechnung auf monat+1 wenn tag > 30 bzw 31 ist vermutlich auch nicht sooo unkompliziert… möchte ja möglichst einfachen code haben :wink:

über Inspirationen wäre ich sehr dankbar
Gruss
Munich

Hallo Experten,

wieder mal stehe ich vor einem mehr oder minder kleinem
Problem…
Nämlich dem der Datumsflexibilität in php/mysql…

Für meine bisherigen Projekte habe ich eigentlich fast immer
den Unix timestamp verwendet… Nun möchte ich aber in einem
etwas grösserem Projekt Geburtstage hinterlegen und ich
brauche dazu auch das Geburtsjahr…
Das Problem dabei machen die Geburtstage vor 1970… Weil der
Unix Timestamp ja bekanntlich erst ab 1.1.1970 zählt und ich
davor mit mktime nicht erstellen kann…

Wenn ich aber jetzt auf das Datumsformat (date) zurückgreife,
wie kann ich dann damit berechnungen anstellen? Wie addiere

Direkt im SQL / SELECT ?

ich zu einem Datum möglichst simpel Tage, Monate, Jahre dazu?

SELECT DATE_ADD(‚1965-4-02‘, INTERVAL 4 DAY) …

ggfs. noch DATE_FORMAT „aussenrum“.

Muss ich dazu wirklich jedesmal den Datensatz auslesen, und
ein z.b. date(0,0,0,…,x+2); anwenden nur um zu einem Datum
etwas dazuzuaddieren?

Arbeitet PHP nicht intern grundsätzlich mit Unix-Timestamps, weswegen das gar nicht so geht ?

das php manual scheint da nicht allzuviel dazu herzugeben und
mit mysql kenne ich mich nicht sooo gut aus um die Funktionen
zu verwenden…

http://dev.mysql.com/doc/mysql/en/Date_and_time_func…
hat viele Beispiele…

Das einzige was mir noch eingefallen ist wäre es so
umzuformatieren, dass es ein Zahlenwert ist, mit dem man
weiterrechnen kann… aber naja… zu einem 25. Februar eine
Woche dazuzählen ist so ne Sache… (Schaltjahr) und die
umrechnung auf monat+1 wenn tag > 30 bzw 31 ist vermutlich
auch nicht sooo unkompliziert… möchte ja möglichst einfachen
code haben :wink:

Den Stress würde ich mir nicht machen, mysql kann ganz gut mit Zeiten rechnen, und mit Zeitangaben vor dem 1970 umgehen.
Wenn du kein Windows-System hast, kannst du auch mit negativen Taimestamps arbeiten, 1901 sollte als minimales Geburtsjahr reichen, und dann gehen auch die PHP Funktionen…

Alexander

Das einzige was mir noch eingefallen ist wäre es so
umzuformatieren, dass es ein Zahlenwert ist, mit dem man
weiterrechnen kann… aber naja… zu einem 25. Februar eine
Woche dazuzählen ist so ne Sache… (Schaltjahr) und die
umrechnung auf monat+1 wenn tag > 30 bzw 31 ist vermutlich
auch nicht sooo unkompliziert… möchte ja möglichst einfachen
code haben :wink:

Hi,

in der Astronomie berechnet man mit dem sog. „Julian Date“ in mysql dayofyear(…).

Diese Funktion ist leicht in php umzusetzen: dazu brauchst du folgendes:

$isLeap = (($year & 3) == 0) && (($year % 100) != 0 || ($year % 400) == 0);

gibt an, ob ein beliebiges Jahr ein Schaltjahr ist. Vorteil: innerhalb des Jahres brauchst du nicht mit den Monatsübergängen zu rechnen. Dieses Format ist auch sehr leicht zurückrechenbar. Zum Beispiel:

der 25. Februar ist der 56. julianische Tag. Addieren wir 7 Tage: 63
Erst wenn wir zurückrechnen kommt das Schaltjahr ins Spiel. Dazu brauchen wir zwei Arrays:
$dayList = Array(Array(0,31,28,31,30,31,30,31,31,30,31,30,31,0),Array(0,31,29,31,30,31,30,31,31,30,31,30,31,0));
$neuesdatum=$datum + 7; ist das neu berechnete Datum.

mit einer einfachen for-Schleife:
for ($i=1; ($temp>$dayList[$isLeap][$i+1] AND $i