CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
28.10.2006, 16:21:00
|
Member
|
|
Registriert seit: Feb 2006
Beiträge: 883
|
|
mktime vor 1.1.1970
Hi,
habe hier gesucht, aber keine Antworten gefunden. Im Eingabeformular werden Tag, Monat und Jahr des Geburtsdatums eingegeben. Daraus will ich ein formatiertes Geburtdatum machen:
PHP-Code:
$gebdatum1 = date("d.m.Y", mktime(0,0,0,$gebdatum1m,$gebdatum1d,$gebdatum1y));
Funktioniert auch. Problem ist, dass es Geburtsdaten vor dem 1.1.1970 nur lokal richtig macht, auf dem Server (Host Europe) scheitert es.
Ist wohl ein Problem der PHP-Umgebung. Weiß jemand, welche Einstellung dafür verantwortlich ist (und ggf. wie man sie ändert)?
Danke für alle Tipps.
Heinrich
|
28.10.2006, 16:47:29
|
Anfänger
|
|
Registriert seit: May 2006
Beiträge: 5
|
|
AW: mktime vor 1.1.1970
Bei mktime darf die Angabe des Jahre nicht unter 1970 gehen, da der Timestamp die Sekunden vom 01.01.1970 berechnet. Schau mal hier http://www.php.net/manual/de/function.mktime.php
|
28.10.2006, 16:53:46
|
Member
|
|
Registriert seit: Feb 2006
Beiträge: 883
|
|
AW: mktime vor 1.1.1970
Hi,
danke für den Hinweis.
Da steht aber auch das:
"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)"
Und übrigens funktioniert es lokal ja auch richtig. Also muss doch irgendeine Einstellung auf dem Host Europe-Server anders sein als auf meinem lokalen, oder?
Hast du noch eine Idee?
Gruß
Heinrich
|
28.10.2006, 17:23:32
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
AW: mktime vor 1.1.1970
Zitat:
Zitat von Heinrich
Hast du noch eine Idee?
|
Überlege doch mal logisch. Der Timestamp beinhaltet die seit dem 1.1.1970 1:00:00 vergangenen Sekunden...
Ich käme da überhaupt nicht auf die Idee, zu versuchen, ein früheres Datum zu benutzen.
Da die Daten sicher in einer Datenbank gespeichert werden:
http://dev.mysql.com/doc/refman/5.1/...-overview.html
Zitat:
DATE
Datum. Der unterstützte Bereich liegt zwischen '1000-01-01' und '9999-12-31'. MySQL zeigt DATE-Werte im Format 'YYYY-MM-DD' an, gestattet Ihnen aber, wahlweise Strings oder Zahlen in DATE-Spalten einzugeben.
DATETIME
Kombination aus Datum und Uhrzeit. Der unterstützte Bereich liegt zwischen '1000-01-01 00:00:00' und '9999-12-31 23:59:59'. MySQL zeigt DATETIME-Werte im Format 'YYYY-MM-DD HH:MM:SS' an, gestattet Ihnen aber, wahlweise Strings oder Zahlen in DATETIME-Spalten einzugeben.
#
TIMESTAMP[(M)]
Zeitstempel. Der Bereich liegt zwischen '1970-01-01 00:00:00' und einem Zeitpunkt irgendwann im Jahr 2037.
Eine TIMESTAMP-Spalte ist nützlich, um Datum und Uhrzeit einer INSERT- oder UPDATE-Operation aufzunehmen. Standardmäßig wird die erste TIMESTAMP-Spalte in einer Tabelle automatisch auf das Datum und die Uhrzeit der zuletzt durchgeführten Operation gesetzt, sofern Sie nicht selbst einen Wert angeben. Sie können TIMESTAMP-Spalten auch auf die aktuellen Werte für Datum und Uhrzeit setzen, indem Sie einen NULL-Wert zuweisen. Varianten der automatischen Initialisierung und Eigenschaften von Änderungen sind in Abschnitt 11.3.1.1, „TIMESTAMP-Eigenschaften ab MySQL 4.1“, beschrieben.
Ein TIMESTAMP-Wert wird als String im Format 'YYYY-MM-DD HH:MM:SS' zurückgegeben, dessen Anzeigebreite auf 19 Zeichen festgelegt ist. Um den Wert als Zahl zu erhalten, sollten Sie +0 zur Zeitstempelspalte hinzufügen.
Hinweis: Das vor MySQL 4.1 verwendete TIMESTAMP-Format wird von MySQL 5.1 nicht unterstützt. Informationen zum veralteten Format finden Sie im MySQL-Referenzhandbuch für die Versionen 3.23, 4.0 und 4.1.
|
Für den Fall, daß Du MySQL 4.0 oder kleiner hast:
Zitat:
7.2.2.2. Die DATETIME-, DATE- und TIMESTAMP-Typen
Die DATETIME-, DATE- und TIMESTAMP-Typen sind verwandt. Dieser Abschnitt beschreibt ihre Charakteristiken, wo sie sich ähnlich sind und wo sie sich unterscheiden.
Der DATETIME-Typ wird benutzt, wenn Sie Werte brauchen, die sowohl Datums- als auch Zeitinformationen beinhalten. MySQL ruft DATETIME-Werte ab und zeigt sie an im 'YYYY-MM-DD HH:MM:SS'-Format. Der unterstützte Wertebereich ist '1000-01-01 00:00:00' bis '9999-12-31 23:59:59'. (``Unterstützt'' heißt, dass frühere Werte zwar funktionieren können, dass es aber keine Garantie dafür gibt.)
Der DATE-Typ wird benutzt, wenn Sie nur einen Datumswert brauchen, ohne Zeitanteil. MySQL ruft DATE-Werte ab und zeigt sie an im 'YYYY-MM-DD'-Format. Der unterstützte Wertebereich ist '1000-01-01' bis '9999-12-31'.
Der TIMESTAMP-Typ ist ein Typ, den Sie dafür benutzen können, um INSERT- oder UPDATE-Operationen mit dem aktuellen Datum und der aktuellen Zeit zu stempeln. Wenn Sie mehrfache TIMESTAMP-Spalten haben, wird nur die erste automatisch aktualisiert.
Die automatische Aktualisierung der TIMESTAMP-Spalte geschieht unter einer der folgenden Bedingungen:
Die Spalte wird in einem INSERT- oder LOAD DATA INFILE-Statement nicht explizit angegeben.
Die Spalte wird in einem UPDATE-Statement nicht explizit angegeben, aber ein anderer Spaltenwert ändert sich. (Beachten Sie, dass ein UPDATE, das eine Spalte auf einen Wert setzt, den diese bereits hat, nicht dazu führt, dass die TIMESTAMP-Spalte aktualisiert wird, weil MySQL das Aktualisieren in einem solchen Fall auf Effizienzgründen ignoriert.)
Wenn Sie die TIMESTAMP-Spalte explizit auf NULL setzen.
TIMESTAMP-Spalten abgesehen von der ersten können ebenfalls auf das aktuelle Datum und die aktuelle Zeit gesetzt werden. Setzen Sie die Spalte einfach auf NULL oder auf NOW().
Sie können jede TIMESTAMP-Spalte auf einen Wert setzen, der vom aktuellen Datum und der aktuellen Zeit abweicht, indem Sie sie explizit auf den gewünschten Wert setzen. Das gilt sogar für die erste TIMESTAMP-Spalte. Sie können diese Eigenschaft benutzen, wenn Sie einen TIMESTAMP auf das aktuelle Datum und die aktuelle Zeit setzen wollen, wenn Sie eine Zeile erzeugen, nicht aber, wenn die Zeile später aktualisiert wird:
Lassen Sie MySQL die Spalte setzen, wenn die Zeile erzeugt wird. Das initialisiert sie auf das aktuelle Datum und die aktuelle Zeit.
Wenn Sie nachfolgende Aktualisierungen anderer Spalten in der Zeile durchführen, setzen Sie die TIMESTAMP-Spalte explizit auf ihren aktuellen Wert.
Auf der anderen Seite finden Sie vielleicht mindestens so einfach, eine DATETIME-Spalte zu benutzen, die Sie auf NOW() initialisieren, wenn die Zeile erzeugt wird, und die Sie bei nachfolgenden Aktualisierungen nicht anfassen.
TIMESTAMP-Werte haben einen Wertebereich von 1970 bis irgendwann im Jahr 2037, bei einer Auflösung von einer Sekunde. Werte werden als Zahlen angezeigt. ...
|
|
28.10.2006, 17:56:14
|
Member
|
|
Registriert seit: Feb 2006
Beiträge: 883
|
|
AW: mktime vor 1.1.1970
Hi Meikel,
in unserem Alter sollte man mit so hohen Daten rechnen können. Logisch erscheint dein Hinweis schon. Aber warum funktioniert dies bei mir lokal.....
PHP-Code:
// Geburtsdatum
$d = "15";
$m = "7";
$y = "1954";
echo "Der Timestamp hat den Wert: ".mktime(0,0,0,$m,$d,$y)."<p>";
echo "Als Datum wird ausgegeben: ".date('d.m.Y', mktime(0,0,0,$m,$d,$y))."<p>";
// Heute
$heute = date('U');
$alter = ($heute-mktime(0,0,0,$m,$d,$y))/(86400*365);
echo "Der Bub ist: ".round($alter)." Jahre alt";
[B]Ausgabe:[/B]
Der Timestamp hat den Wert: -488077200
Als Datum wird ausgegeben: 15.07.1954
Der Bub ist: 52 Jahre alt
...aber nicht auf dem Server? Hast du 'ne Idee?
Gruß
Heinrich
|
28.10.2006, 18:08:56
|
Member
|
|
Registriert seit: Feb 2006
Beiträge: 883
|
|
AW: mktime vor 1.1.1970
Hi,
hatte auf dem Server noch eine alte PHP-Version laufen. Jetzt läuft 5.1.5 (und zu Hause 5.1.4). Damit geht das.
Gruß
Heinrich
|
28.10.2006, 21:33:59
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
AW: mktime vor 1.1.1970
Zitat:
Zitat von Heinrich
in unserem Alter sollte man mit so hohen Daten rechnen können.
|
Da ich Datensätze grundsätzlich in eine SQL Datenbank speichere, habe ich absolut keine Probleme, Daten vor dem 1.1.1970 zu verwursten, zumal dieDATE+TIME von MySQL Funktionen viel mächtiger sind als der Kram, den PHP zu bieten hat.
Zitat:
Logisch erscheint dein Hinweis schon. Aber warum funktioniert dies bei mir lokal.....
|
Eigentlich egal, weil es ein Beispiel dafür ist, daß es nicht funktionieren muß.
|
28.10.2006, 22:46:36
|
Member
|
|
Registriert seit: Feb 2006
Beiträge: 883
|
|
AW: mktime vor 1.1.1970
Na ja, jetzt klappt's be mir ja.
Ich speichere das logischerweise auch in der Datenbank. Nur vorher müssen einige Berechnungen durchgeführt werden (Einteilung der Leute in Altersklassen). Wenn ich das nicht vorher mache (und die Ergebnisse in der DB speichere), dann müsste ich's hinterher machen und hätten das gleiche Problem zu lösen. Da hilft auch DATE und TIME von MySQL nix.
Gruß
Heinrich
|
29.10.2006, 01:04:59
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
AW: mktime vor 1.1.1970
Zitat:
Zitat von Heinrich
Ich speichere das logischerweise auch in der Datenbank. Nur vorher müssen einige Berechnungen durchgeführt werden (Einteilung der Leute in Altersklassen).
|
Eben mal getestet (MySQL - 5.0.22 + MySQL 4.0.15):
Code:
SELECT '2006-10-29' - '1948-09-21'
Ausgabe:
Zufall?
Geändert von meikel (†) (29.10.2006 um 01:05:26 Uhr)
|
29.10.2006, 10:23:24
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: mktime vor 1.1.1970
Zitat:
Zitat von meikel
Zufall?
|
Ernstgemeinte Frage?
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 08:26:55 Uhr.
|