SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

Der CSS-Problemlöser

Der CSS-Problemlöser zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 28.10.2006, 17:21:00
Heinrich Heinrich ist offline
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
Mit Zitat antworten
  #2  
Alt 28.10.2006, 17:47:29
webhoster webhoster ist offline
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
Mit Zitat antworten
  #3  
Alt 28.10.2006, 17:53:46
Heinrich Heinrich ist offline
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
Mit Zitat antworten
  #4  
Alt 28.10.2006, 18:18:05
webhoster webhoster ist offline
Anfänger
 
Registriert seit: May 2006
Beiträge: 5
AW: mktime vor 1.1.1970

Hi,

habe es eben mal auf meinem Server probiert. Bei mir geht es bis 1969 und nicht tiefer sorry aber da habe ich auch keine Idee.

Gruß Holger
Mit Zitat antworten
  #5  
Alt 28.10.2006, 18:21:38
Heinrich Heinrich ist offline
Member
 
Registriert seit: Feb 2006
Beiträge: 883
AW: mktime vor 1.1.1970

Hi,

werde mal beim Support von HE anrufen. Wenn die eine Idee haben, poste ich's hier.

Gruß
Heinrich
Mit Zitat antworten
  #6  
Alt 28.10.2006, 18:23:32
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: mktime vor 1.1.1970

Zitat:
Zitat von Heinrich Beitrag anzeigen
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. ...
Mit Zitat antworten
  #7  
Alt 28.10.2006, 18:56:14
Heinrich Heinrich ist offline
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
Mit Zitat antworten
  #8  
Alt 28.10.2006, 19:08:56
Heinrich Heinrich ist offline
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
Mit Zitat antworten
  #9  
Alt 28.10.2006, 22:33:59
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: mktime vor 1.1.1970

Zitat:
Zitat von Heinrich Beitrag anzeigen
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ß.
Mit Zitat antworten
  #10  
Alt 28.10.2006, 23:46:36
Heinrich Heinrich ist offline
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
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mktime vor 1.1.1970 geht beim IE6, bei Oera + FF nicht wundi PHP Grundlagen 2 23.07.2006 02:54:48
Ein Problem mit mktime(), das nicht an der 0 liegt Abhorash PHP Grundlagen 1 17.05.2006 17:22:31
mktime() thorben PHP Grundlagen 2 24.03.2006 18:46:58
mktime Problem Soeren PHP Grundlagen 4 24.08.2005 00:08:16
mktime & date Walter PHP für Fortgeschrittene und Experten 1 03.05.2002 20:00:56


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:21:55 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt