Anzeige
Tutorialbeschreibung

Wochentag und Monat im Datum auf Deutsch ausgeben

Wochentag und Monat im Datum auf Deutsch ausgeben

Im nachfolgenden Tutorial erkläre ich eine kleine selbst geschriebene php-Funktion, mit der man anstatt der englischen Ausgaben im Datum deutsche Ausgaben erhält.


Wenn man die date()-Funktion in php verwendet, erhält man immer englische Namen für die Wochentage oder Monate. Das macht sich meist nicht so gut bei auf Deutsch geschriebenen Seiten.

Aus diesem Grund habe ich eine kleine Funktion für meine Homepage geschrieben, die ich euch gerne vorstellen möchte. Die Funktion datum() fungiert als deutscher Ersatz für die englische date()-Funktion!

// herkömmliche Ausgabe
 echo date('l, j. F Y'); // Ausgabe: "Friday, 10. September 2010"

 // so wäre es doch schöner
 echo datum('l, j. F Y'); // Ausgabe: "Freitag, 10. September 2010"


Zuerst erstelle ich die die Funktion datum() mit dem Rückgabewert der Variable $datum:
/* ### Englisches Datum in deutsches umwandeln ### */
 function datum($format) {
		
 return $datum;
 }


Danach lasse ich das Datum erst einmal wie gehabt in Englisch ausgeben:
/* ### Englisches Datum in deutsches umwandeln ### */
 function datum($format) {
		
 // Datum zuerst in Englisch einlesen
 $datum = date($format);
		
 return $datum;
 }
Jetzt würde die Fkt. datum() dasselbe ausgeben wie date()!


Die Fkt. hat zwei Eingabe-Parameter:
date(string $format [, int $timestamp]);
$format: An erster Stelle einen String, der die Formatierung des Datums enthält!
$timestamp: An zweiter Stelle einen Integer (eine Zahl), der das Datum als timestamp enthalten kann!
Der letzte Parameter ist optional; wenn er nicht angegeben ist, wird die aktuelle Zeit genommen!


Unsere Fkt. datum() soll natürlich genauso aufgebaut sein:
function datum($format) {
		
 // Testen, ob timestamp gegeben
 if (func_num_args() == 2) {
 $zeit = func_get_arg(1); // timestamp aus Fkt. übernehmen
 } else {
 $zeit = time(); // timestamp von jetzt
 }
		
 // Datum zuerst in Englisch einlesen
 $datum = date($format, $zeit);
		
 return $datum;
 }

Dazu bauen wir eine If-Abfrage ein, ob der zweite Parameter der Fkt. definiert ist. Falls nicht, wird per time() der aktuelle timestamp eingefügt.


Man könnte den zweiten Parameter auch so fest in der Fkt. definieren; dann würde man sich die If-Abfrage sparen, aber dann wäre dieser Parameter nicht mehr optional und es würde zu einem Fehler kommen, wenn dieser nicht definiert ist:

function datum($format, $zeit) {		
 // ...

Also machen wir das nicht!

 
Als Nächstes ersetzen wir die englischen Ausgaben:

// ...
 $suchen = array(); // Regulärer Ausdruck
 $ersetzen = array();
 $datum = preg_replace($suchen, $ersetzen, $datum);
 // ...
Ich verwende dafür die preg_replace() Fkt.; bei dieser muss man zwar mit regulären Ausdrücken arbeiten, aber dies geht nach meinen Erfahrungen am schnellsten!


Wir wollen natürlich nur dann etwas ersetzen, wenn es auch nötig ist, etwas zu ersetzen:
// ...
 if (preg_match("''", $format)) { // Regulärer Ausdruck
 $suchen = array();
 $ersetzen = array();
		
 $datum = preg_replace($suchen, $ersetzen, $datum);
 }
 // ...

Deshalb lassen wir in einer If-Abfrage mit preg_match() nach den Formatierungs-Ausdrücken in $form suchen und ersetzen nur dann, wenn etwas gefunden wird. preg_match() verwendet wieder reguläre Ausdrücke, ist aber meines Erachtens auch schneller als vergleichbare Fkt.


Hier die vier eigentlichen englischen Ausdrücke, die ersetzt werden sollen:

Die Wochentagsnamen:
// Voller Wochentagsname
 if (preg_match("'l'", $format)) {		
 $suchen = array("'Monday'","'Tuesday'","'Wednesday'","'Thursday'","'Friday'","'Saturday'","'Sunday'");
 $ersetzen = array("Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag");
		
 $datum = preg_replace($suchen, $ersetzen, $datum);
 }
Hier sieht man noch mal (für all die, die mit den regulären Ausdrücken nichts anfangen können), was mit regulären Ausdrücken gemeint ist. Die Suchabfragen sind in zwei Arten von Anführungszeichen gefasst, damit auch wirklich nach dem Buchstaben selbst gesucht wird!


Die gekürzten Wochentagsnamen:
// Gekürzter Wochentagsname
 if (preg_match("'D'", $format)) {		
 $suchen = array("'Mon'","'Tue'","'Wed'","'Thu'","'Fri'","'Sat'","'Sun'");
 $ersetzen = array("Mo","Di","Mi","Do","Fr","Sa","So");		
		
 $datum = preg_replace($suchen, $ersetzen, $datum);
 }


Die Monatsnamen:
// Monatsname
 if (preg_match("'F'", $format)) {	
 $suchen = array("'January'","'February'","'March'","'May'","'June'","'July'","'October'","'December'");
 $ersetzen = array("Januar","Februar","März","Mai","Juni","Juli","Oktober","Dezember");
		
 $datum = preg_replace($suchen, $ersetzen, $datum);
 }	
(Man beachte, dass man nur 8 Namen ersetzen muss ^^)


Die Suffix-Angaben:
// Suffix
 if (preg_match("'S'", $format)) {	
 $suchen = array("'st'","'nd'","'rd'","'th'");
 $ersetzen = array("ter","ter","ter","ter");
		
 $datum = preg_replace($suchen, $ersetzen, $datum);
 }

Wird im Deutschen nicht so oft gebraucht, aber man weiß ja nie!


Das waren alle Formatierungen, die in englischer Sprache anders sind als in deutscher! So sieht die Funktion nun schlussendlich aus:

/* ### ### ### ### ### Englisches Datum in deutsches umwandeln ### ### ### ### ### */
function datum($format) {
		
 // Testen, ob timestamp gegeben
 if (func_num_args() == 2) {
 $zeit = func_get_arg(1); // timestamp aus Fkt. übernehmen
 } else {
 $zeit = time(); // timestamp von jetzt
 }
		
 // Datum zuerst in Englisch einlesen
 $datum = date($format, $zeit);
		
 // Voller Wochentagsname
 if (preg_match("'l'", $format)) {		
 $suchen = array("'Monday'","'Tuesday'","'Wednesday'","'Thursday'","'Friday'","'Saturday'","'Sunday'");
 $ersetzen = array("Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag");
			
 $datum = preg_replace($suchen, $ersetzen, $datum);
 }
		
 // Gekürzter Wochentagsname
 if (preg_match("'D'", $format)) {		
 $suchen = array("'Mon'","'Tue'","'Wed'","'Thu'","'Fri'","'Sat'","'Sun'");
 $ersetzen = array("Mo","Di","Mi","Do","Fr","Sa","So");		
			
 $datum = preg_replace($suchen, $ersetzen, $datum);
	}
		
 // Monatsname
 if (preg_match("'F'", $format)) {	
 $suchen = array("'January'","'February'","'March'","'May'","'June'","'July'","'October'","'December'");
 $ersetzen = array("Januar","Februar","März","Mai","Juni","Juli","Oktober","Dezember");
			
 $datum = preg_replace($suchen, $ersetzen, $datum);
 }	
		
 // Suffix
 if (preg_match("'S'", $format)) {	
 $suchen = array("'st'","'nd'","'rd'","'th'");
 $ersetzen = array("ter","ter","ter","ter");
			
 $datum = preg_replace($suchen, $ersetzen, $datum);
 }	
		
 return $datum;
}


Hier ein paar Beispiel-Ausgaben für die Funktion:

echo datum('l, j. F Y'); // Ausgabe: "Freitag, 10. September 2010"
 echo datum('D, j. F Y'); // Ausgabe: "Fr., 10. September 2010"
 echo datum('jS F Y'); // Ausgabe: "10ter September 2010"


Wenn diese Funktion in eurem Skript definiert ist, könnt ihr überall date() durch datum() ersetzen, mit denselben Eingaben in den Parametern!


Ich hoffe, euch hat das kleine Tutorial gefallen! Ich habe versucht, alles so gut es geht zu beschreiben und aussagekräftig zu formulieren!

Es ist mein erstes auf PSD-Tutorials.de, und wenn die Resonanz entsprechend ausfällt, ist es auch nicht mein letztes! Wenn es Fragen in irgendeiner Form gibt, bitte ich euch, diese per PN an mich zu stellen.

Chris

Kommentare
Achtung: Du kannst den Inhalt erst nach dem Login kommentieren.
Portrait von zazu81
  • 16.09.2011 - 19:11

Schönes und ausführliches Tutorial. setlocale(LC_TIME, 'de_DE')" funktionierte auf einem Server bei mir auch nicht, so dass ich mir da die Karten legen musste. Schön zu wissen, wie es funktioniert... Danke.

Portrait von dlogic
  • 30.10.2010 - 01:38

Sehr schön verständlich die einzelnen Schritte beschrieben und eine nützliche Funktion.

Portrait von MonMon294
  • 26.10.2010 - 23:23

gute Arbeit ist wirklich hilfreich daumen hoch 5 Stars ^^

Portrait von EnricoS
  • 26.10.2010 - 09:57

Ich erinnere mich noch dunkel, dass "setlocale(LC_TIME, 'de_DE')" und "strftime("%e. %B %Y")" ähnliches leisten, oder?

Portrait von CrysKey
  • 26.10.2010 - 15:34

Das funktioniert nur, wenn auf Ihrem System die deutsch Locale-Codes installiert sind. Ist auf meinen gemieteten Server nicht der Fall ...

x
×
×