PHP: Datumsangaben

Virginia

Ensign
Registriert
Aug. 2005
Beiträge
133
Ich bräuchte die einfachste Art und Weise, mit PHP ein deutsches Datum in ein englisches umzuwandeln.

Also z.B. "01.01.2007" in "2007-01-01"

Wäre dankbar, wenn mir jmd. helfen könnte.
 
$eng_datum = explode('.', $dt_datum);
$eng_datum = $eng_datum[2].'-'.$eng_datum[1].'-'.$eng_datum[0];

so ungefähr.

Achso und falls führende Nullen in jedem Fall dabei sein sollen geht auch analog sowas:

$eng_datum = sprintf("%04d-%02d-%02d", $eng_datum[2], $eng_datum[1], $eng_datum[0]);
 
Zuletzt bearbeitet:
Hmm also für diesen speziellen Fall wäre mir jetzt keine extra Funktion bekannt, die das noch weiter vereinfachen und beschleungen würde, eher für timestamps oder andere Datumsgeschichten.

Hier soll ja im Prinzip nur ein String umgemodelt werden, der zufällig auch ein Datum sein kann. Wer was besseres findet gewinnt den Preis. :)
 
Virginia schrieb:
Ich bräuchte die einfachste Art und Weise, mit PHP ein deutsches Datum in ein englisches umzuwandeln.

Also z.B. "01.01.2007" in "2007-01-01"

Wäre dankbar, wenn mir jmd. helfen könnte.

Wenn TT.MM.JJJJ ein deutsches ist, ist das korrespondierende englische: MM.TT.JJJJ (wie's im Englischen auch gesprochen wird).

JJJJ-MM-TT ist eher ein Format, was zur einfacheren Darstellung und EDV genutzt wird, dort ist nämlich die Komponente, die sich am Datum am häufigsten ändert (der Tag) in der niedrigsten Stelle (nämlich rechts).

Damit lassen sich dann einfache String / Integervergleiche machen.

Folgendes:
Datum1 = 2. Januar 2007
Datum2 = 1. Januar 2008 (also später)

nun ist aber...

02.01.2007 > 01.01.2008 (was Datum-technisch betrachtet falsch ist, weil von links betrachtet wird)
Einfacher betrachtet: 2012007 > 1012008 !!!

mit der Schreibweise für Datum1 = 20070102 und Datum2 = 20080101 wäre das nicht passiert!!!
 
Also ich arbeite immer mit Timestamps, die lassen sich noch viel einfacher miteinander vergleichen und mit den passenden Funktionen in PHP auch lesbar formatieren.
 
@merv
Mach ich auch grundsätzlich so, auch in der DB. Ist viel flexibler und gibt zum Konvertieren dann auch genügend Funktionen.
Doch wir wissen nicht für was Virginia das braucht. Evt. von Formularfeldern ?

Ich habe mir ne Funktion geschrieben, die automatisch Dropdownboxen für solche Dinge kreiert usw., nix Punkt, Bindestrich etc., egal.


Edit:
@Tewes
Ja für Geburtstage und sowas ists natürlich besser das im String hintereinander zu belassen. ;)
Aber für die meisten anderen Sachen ist erfahrunggemäss Timestamp vorzuziehen.
 
Zuletzt bearbeitet:
Warum man jetzt auch immer Daten, die vor 1970 liegen, als UNIX-Timestamp speichern sollte... *grübel*

Für Geburtstage ist ja wohl der UNIX-Timestamp das übliche "Kanonen auf Spatzen"-Problem.
 
tewes schrieb:
Ist nur schlecht wenn ein datum vor 1970 eingegeben wird ;)

Nur Windows kann bis 1970 umgehen. Andere Betriebssysteme verarbeiten auch negative Timestamps die bis ins Jahr 1901 führen.

@Virginia
PHP:
$time = '01.01.2007'

// wandelt ein Datumsstring in Timestamp um
$stamp =  strtotime($time); 

// gewohnte Ausgabe mit date
echo date('Y-m-d', $stamp);
 
@zatarc: Da aber die Meisten Leute ein Windows Rechner haben und eine Internetseite von allen besucht werden kann, sollte man darauf rücksicht nehmen.

Oder liegt es an dem Sys wo der Server drauf läuft?
 
Zuletzt bearbeitet:
Die "Begrenztheit" liegt daran, dass der Timestamp _noch_ in 32bit kodiert wird.

Ich lege mal eine _äußerst gewagte_ These in den Raum:
Bis zum 19. Januar 2038 (da endet der 32bit timestamp) wird es die Menschheit geschafft haben, von 32bit-CPUs/-Betriebssystemen wegzukommen :freak: :freak: :freak: :D.

Die Umstellung auf 64bit vergrößert die Zeitspanne um ca. 290 Milliarden Jahre (in beide Richtungen).
 
Zurück
Oben