PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit mktime



offe
23-10-2003, 10:12
Hallo,

seit glibc-2.5 auf unserem Server installiert wurde funktioniert mktime mit Datum vor 1970 nicht mehr. Ich habe leider keinen Einfluß auf die Installation.

Gibt es irgendwo eine Funktion die mktime ersetzt und mir den Timestamp für z.B. mktime(0,0,0,12,12,1954) ausbigt?

Offe

Gaert
23-10-2003, 11:33
Hallo!

Versuchs mal mit dem Date Package von Pear: http://pear.php.net/package/Date

Ich kann mir übrigens schwer vorstellen, dass mktime bei dir jemals mit Daten vor 1970 zurechtgekommen ist - mktime hat schon immer auf Unix Timestamps basiert - da ändert auch deine glibc nix.

offe
23-10-2003, 17:37
Hallo,

> Versuchs mal mit dem Date Package von Pear: http://pear.php.net/package/Date

Habe ich schon probiert, auch die Klassen auf http://www.phpclasses.org aber es gibt da keine Funktion, die aus -299898000 ein 01.07.1960 macht.

> Ich kann mir übrigens schwer vorstellen, dass mktime bei dir jemals mit Daten
> vor 1970 zurechtgekommen ist - mktime hat schon immer auf Unix Timestamps
> basiert - da ändert auch deine glibc nix.

Also auf meinem SUSE 9.0 mit PHP Version 4.3.3 gibt:


echo mktime(0,0,0,7,1,1960) ;

"-299898000" aus.

Offe

Gaert
23-10-2003, 17:48
Du musst von dem Gedanken wegkommen bei Daten vor 1970 oder nach 2034 mit dem Unix Timestamp zu arbeiten, dass du einen Negativen Wert erhälst ist logisch... vor 1970 sind die Zahlen negativ ! Allerdings nur solage, bis du wieder einen Überlauf in dem 32 Bit Integer bekommst - dann hast du wieder positive. Ein Timestamp mit 32 Bit länge kann nunmal nur ca. 65 Jahre fassen, dann gehts wieder von vorne los - ähnlich wie beim Y2k Problem.
Du kommst nicht drum rum mit einem 64 bit Integer zu arbeiten, wenn du unbedingt Sekunden als Zeiteinheit verwenden möchtest.

offe
23-10-2003, 22:11
Hallo,

ich habe das Geburtstag aber als Timestamp gespeichert und jetzt hat jeder, der vor 1970 geboren ist, den 30.12.1969 als Geburtstag. Dieses wird dann gespeichert und das richtige Geburtsdatum ist verloren.

Bei neuen Daten kann ich das Geburtsdatum ja mit 12.03.1956 speichern, ich sollte aber die alten Daten vorher umwandeln.

Offe

Gaert
23-10-2003, 22:33
Ich fürchte dann hast du ein Problem...

Ich habs gerade mal bei mir ausprobiert - bei mir bekomme ich immer -3662 zurück wenn ich mit mktime einen Timestamp erstellen will, welcher ausserhalb des "Unix Zeitalters" liegt.

offe
23-10-2003, 22:51
ich hatte die Hoffnung, daß ich nicht der erste bin der dieses Problem hat und das es schon eine Klasse zur Berechnung gibt.

Falls es noch keine Klasse gibt müßte ich halt eine schreiben. Aber auch hier würde ich gerne auf bestehende Klassen zurückgreifen.

Ist die PEAR Date-Klasse die einzige die hierfür in Frage kommt?

Offe

Gaert
24-10-2003, 08:39
Es ist die einzige die mir bekannt ist, aber sicher nicht die einzige die es gibt - vielleicht haben ja andere Leute noch eine Idee?

elrond
24-10-2003, 08:58
auf das datum vor 1970 so viele Jahre draufrechnen, daß man wieder im grünen bereich ist, und die Differenz in einem zweiten feld vermerken...

offe
24-10-2003, 09:49
also z.B. bei negativen Zahlen 1262307600 (Betrag von mktime(0,0,0,1,1,1930)) dazurechnen und dann 40 Jahre abziehen.

Wie sieht das mit Schaltjahren aus? Werde ich aber auf jeden Fall testen.

Offe