mktime vor 21.12.1969 ?
susi
- php
0 wahsaga0 susi1 Andreas Dölling0 susi
0 hilker0 Andreas Korthaus
hallo habe folgendes problem!
$birthdate= date ("Y-m-d", mktime (0,0,0,1961,06,21));
liefert mir immer das unix-geburtssdatum 31.12.1969 zurück!
wie kann ich dies beenden?
bzw. gibts ene alternative zu mktime?
lg, susi
hi,
$birthdate= date ("Y-m-d", mktime (0,0,0,1961,06,21));
liefert mir immer das unix-geburtssdatum 31.12.1969 zurück!
wie kann ich dies beenden?
bzw. gibts ene alternative zu mktime?
du bräuchtest wenn überhaupt eine alternative zum unix timestamp, weil dieser eigentlich erst ab 1.1.1970 "definiert" ist.
unter linux sollen auch negative werte für den timestamp "funktionieren", unter windows wird dies jedoch laut manual nicht unterstützt.
gruß,
wahsaga
ja aber date braucht ja einen unix timestamp also input zum formatieren!
was gibts denn da für eine alternative?
hi,
$birthdate= date ("Y-m-d", mktime (0,0,0,1961,06,21));
Hallo,
Du mußt die Argumente der Funktion in der richtigen Reihenfolge übergeben:
int mktime ( [int Stunde [, int Minute [, int Sekunde [, int Monat [, int Tag [, int Jahr [, int is_dst]]]]]]]);
Also:
$birthdate= date ("Y-m-d", mktime (0,0,0,06,21,1961));
Und was den negativen Timestamp angeht:
Das Jahr darf zwei- oder vierstellig angegeben werden. Werte von 0 bis 69 stehen dann für die Jahre 2000 bis 2069, und 70 bis 99 für die Jahre von 1970-1999 (auf Systemen, die time_t als 32Bit-Integer abbilden, was heutzutage gebräuchlich ist, liegt der gültige Bereich für den Parameter Jahr irgendwo zwischen 1901 und 2038).
[http://de.php.net/manual/de/function.mktime.php]
;)
Ciao,
Andreas
ja alles klar! danke dennoch ...
die reihenfolge war ein versehen!
nur was wenn ich einen timestamp vor 1969 brauche?
nur was wenn ich einen timestamp vor 1969 brauche?
Du hast recht. Bei mir liefert etwa
echo date("d-m-Y", mktime(0, 0, 0, 7, 20, 1950));
auch ein falsches Datum, eben den 31.12.69.
Aber schau mal unter http://de2.php.net/manual/de/function.mktime.php in die User-Kommentare. Dort bietet ein "todd at buiten dot com" eine Funktion für Daten vor 1970 an.
Keine Ahnung, wie gut diese Funktion ist (habe nur flüchtig drübergelesen), aber ein Test lohnt sich sicher.
Ciao,
Andreas
Hi susi,
nur was wenn ich einen timestamp vor 1969 brauche?
Überleg dir ein eigenes "Datumsformat", z.B. YYYYMMTT, also JahrMonatTag, von heute: 20050217
Mittels substr() solltest du dir dann die einzelnen Informationen wieder rausziehen können. Wenn du auch noch eine Zeit brauchst, kannst du die sogar auch noch dahinter hängen.
Vorteil dieser Methode gegenüber eventuellen anderen: Wenn man die Zahlen nach der Größe ordnet, sind diese auch gleichzeitig nach Datum geordnet. Das ganze lässt sich in einer DB in einem INT Feld abspeichern.
MfG, Dennis.
hi susi,
läuft zufällig mySQL oder eine andere Datenbank?
die können in der Regel alle daten von -9999-1-1 bis +9999-12-31
mfG Markus
Hallo!
$birthdate= date ("Y-m-d", mktime (0,0,0,1961,06,21));
liefert mir immer das unix-geburtssdatum 31.12.1969 zurück!
wie kann ich dies beenden?
bzw. gibts eine alternative zu mktime?
Wie beim Datenbankzugriff gibt es auch bei den Datums/Zeit Funktionen Unzulänglichkeiten, wie z.B. von Dir beschrieben. Einige Ideen findest Du auch in den Kommentaren zu mktime().
Um das Problem grundsätzlich zu lösen, wird es in PHP 5.1 auch eine neue Date-Extension geben, basierend auf folgendem PECL-Paket:
http://pecl.php.net/package/date_time
http://cvs.php.net/co.php/pecl/date/docs/examples/sample1.php
Bis dahin könnte vielleicht PEAR::Date helfen? Leider gibt es AFAIK keine Doku, aber eine API-Dokumentation: http://pear.php.net/package/Date/docs/1.4.2/Date/Date.html
Grüße
Andreas