Funktion | Bedeutung |
time() | Sytemszeit als Zeitstempel. Das sind die Sekunden seit 01.01.1970 |
microtime() | Ermittelt Systemzeit sehr genau mit Microsekunden |
date_default_timezone_set() | Setzt die Zeitzone für alle Datums und Zeitfunktionen. |
date() | Formatiert ein Datum. Die Funktion liefert zudem das aktuelle Tagesdatum (das Systemdatum des Servers), wenn kein Datumswert angegeben wird (beispielsweise mit mktime, siehe unten) |
checkdate | Prüft ob sich ein Ausdruck als Datumswert interpretieren läßt. |
mktime() | Erzeugt einen absoluten Zeit/ Datumswert (Zeitstempel) |
strtotime() | Erzeugt eine relative Zeitangabe |
getdate() | Liefert ein Array mit Datums- und Zeitwerten |
gettimeofday() | Erzeugt einen Timestamp als assoziatives Array. |
gmmktime() | Erzeugt einen GMT- Zeit/ Datumswert (Zeitstempel) |
SQL Zeitfunktionen | SQL Zeitfunktionen ermöglichen Abfragen in Feldern mit Zeitstempeln |
Ermittelt die aktuelle Systemzeit. Dieser Zeitstempel ermittelt die Sekunden die seit dem 01.01.1970 verstrichen sind. Diesen Zeitstempel kann man beispielsweise mit date() in ein Datumsformat formatieren. Dazu gibt man diesen als zweiten Parameter dort ein. Allerdings ist es nicht nötig, da die date() Funktion sowieso die aktuelle Systemzeit ausgibt, wenn der zweite Parameter fehlt.
Mit time() lassen sich jedoch Berechnungen anstellen.
microtime()
erzeugt auch einen Zeitstempel wie time()
, aber er ist genauer, weil auch die Microsekunden gemessen werden. Standardmäßig wird eine Zeichenkette ausgegben mit 2 Zahlen, die Microsekunden und die Sekunden. Mit dem Argument true wird eine Fließkommzahl ausgegeben. microtime(true).
Wenn man in einer For-Schleife microtime(true) 20 mal anzeigen lässt sieht man Unterschiede.
Setzt die Zeitzone, die von allen Datums und Zeitfunktionen genutzt werden.
Hier eine Liste unterstützter Zeitzonen.
date_default_timezone_set('Europe/Amsterdam');
siehe auch PHP Manual
Mit der Date Funktion wird das aktuelle Tagesdatum des Servers ausgegeben. Durch die Reihenfolge der Formatsymbole , erhält man die gewünschte Anzeige. Im zweiten Beispiel wurde anstatt des Punktes ein Schrägstrich und Leerzeichen gesetzt.
30.12.2024 30 / 12 / 24 |
<?php echo date("d.m.Y") ?> <?php echo date("d / m / y") ?> |
Die Formatsymbole müssen, wenn es mehr als eines ist, in Anführungsstriche
eingeschlossen werden.
Negative Werte werden von date nicht akzeptiert.
Als zweiten Parameter kann man einen Zeitstempel eingeben. Wenn das zweite Argument fehlt, wird die aktuelle Systemzeit genommen.
Anzeige | Symbol | Bedeutung |
17 | H | Stunde im 24 Stunden Format |
05 | h | Stunde im 12 Stunden Format |
pm | a | am und pm |
PM | A | AM und PM |
10 | i | Minuten |
46 | s | Sekunden |
30 | d | Tag des Monats als zweistellige Ziffer |
30 | j | Tag des Monats ohne führende Null bei einstelligem Tagesdatum |
Mon | D | Wochentag in abgekürzter (englischer Schreibweise) |
Monday | l (L) | vollständiger Wochentag |
1 | w | Wochentag als Zahl (0=Sonntag) |
12 | m | Zweistellige Monatsangabe |
December | F | Monatsname in englisch |
Dec | M | Monatsname (abgekürzte englische Schreibweise) |
31 | t | Zahl der Tage eines Monats |
24 | y | zweistellige Jahreszahl |
2024 | Y | vierstellige Jahreszahl |
364 | z | Tag des Jahres von 1 bis 365 |
Die date Funktion gibt das Systemdatum aus, wenn nur ein Argument angegeben wird. Als zweites Argument kann man ein eigenes Datum mit mktime eingeben siehe unten. Auch ein Zeitstempel aus einer Datenbank wäre möglich.
Ein zweites Argument als numerischer Wert steht für die Sekunden, die seit
Beginn der Zählung am 1.1.1970 verstrichen sind. Zum Beispiel
echo date("d.m.Y",
0); liefert 01.01.1970.
Dieses Datum ist der Beginn der Unix Zeitrechnung.
Mittels checkdate() läßt sich überprüfen, ob es sich um gültige
Datumswerte handelt, die Argumente, sind in der Reihenfolge: Monat, Tag, Jahr. Man kann es einsetzen, ob es ein Schaltjahr ist, oder anders ausgedrückt, ob der 29. Feb in einem Jahr vorhanden ist.
ein gültiges Datum | <?php if (checkdate(2,29,2020)) echo "ein gültiges Datum"; ?> |
Will man mit Datumswerten rechnen, kann man mit mktime() einen Zeitstempel erzeugen,
um ein bestimmtes Datum festzulegen. mktime() benötigt 6Argumente:
Stunde,
Minute, Sekunde, Monat, Tag, Jahr.
Als siebtes Argument ist noch Sommerzeit
(true) möglich.
Diesen Zeitstempel kann man sich mit date() ausgeben lassen.
22.11.2002 | $ts = mktime(1,1,1,11,22,2002); echo date("d.m.Y",$ts); |
30.12.2024 | $ts2 = mktime(0); echo date("d.m.Y", $ts2); |
Mit strtotime()
kann man einen Zeitstempel aus einer Datenbank in einen UNIX-Zeitstempel konvertieren, damit dieser mit der date()
Funktion formatiert werden kann.
Relative Zeitangaben kann man mit strtotime()
erzeugen. Es wird im ersten Parameter mit Hilfe englischer Begriffe ein zeitlicher Abstand zu einem Bezugspunkt angegeben. Im zweiten Parameter wird der Bezugspunkt als Zeitstempel angegeben, wenn er fehlt wird die aktuelle Zeit genommen.
Die Zeitstempel in folgenden Beispielen werden wieder mit date("d.m.Y", $dann)
als formatiertes Datum ausgegeben.
30.12.2024 | strtotime("now") |
10.09.2000 | strtotime("10 September 2000") |
31.12.2024 | strtotime("+1 day") |
06.01.2025 | strtotime("+1 week") |
02.01.2025 | strtotime("next Thursday") |
23.12.2024 | strtotime("last Monday") |
08.01.2025 | strtotime("+1 week 2 days 4 hours 2 seconds") |
30.07.2024 | strtotime("- 5 month") |
30.01.2024 | strtotime("last year + 1 month") |
Folgende Angaben sind möglich.
week, day, month, year
days
next
oder last
es entspricht +1
oder -1
Englische Wochentage sind mit next
oder last
auch möglich.
Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
Die getdate() Funktion erzeugt
ein Array, dass alle Datumswerte liefert. Mit bestimmten Schlüsselworten
kann man auf die Teile des Datums zugreifen.
Ein Datum vor dem 1.1.1970 erzeugt einen Fehler.
23. March.1991 10:30 1Sek | <?php $Wert =getdate(mktime(10,30,1,03,23,1991) ); echo $Wert["mday"], ". "; echo $Wert["month"], "."; echo $Wert["year"], " "; echo $Wert["hours"], ":"; echo $Wert["minutes"], " "; echo $Wert["seconds"], "Sek "; ?> |
Schlüsselworte | Bedeutung |
mday | Tag |
month | Monat (Name) |
mon | Monat (Zahl) |
year | Jahr |
hours | Stunde |
minutes | Minute |
seconds | Sekunde |
wday | Wochentag (Zahl) |
weekday | Wochentag (Name) |
Monday 30. December.2024 17:10 46 Sek | <?php $Jetzt =getdate(); echo $Jetzt["weekday"], " "; echo $Jetzt["mday"], ". "; echo $Jetzt["month"], "."; echo $Jetzt["year"], " "; echo $Jetzt["hours"], ":"; echo $Jetzt["minutes"], " "; echo $Jetzt["seconds"], " Sek "; ?> |
Montag den 30. Dezember 2024 17:10 Uhr 46 Sek |
<?php $wochentag = array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"); $monat = array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"); $Jetzt =getdate(); echo $wochentag[$Jetzt["wday"]], " den "; echo $Jetzt["mday"], ". "; echo $monat[$Jetzt["mon"]-1], " "; echo $Jetzt["year"], " <br> "; echo $Jetzt["hours"], ":"; echo $Jetzt["minutes"], " Uhr "; echo $Jetzt["seconds"], " Sek "; ?> |
Montag | <?php echo $wochentag[date("w")] ?> |
gettimeofday() liefert ein assosiatives array, wie man es schon von getdate her kennt. Es gibt 4 Elemente. Für die Formatierung wurde die date-Funktion verwendet.
1735575046 583132 -60 0 17:10:46 |
<?php $Zeitwerte = gettimeofday(); echo $Zeitwerte("sec"), "<br>"; echo $Zeitwerte("usec"), "<br>"; echo $Zeitwerte("minuteswest"), "<br>"; echo $Zeitwerte("dsttime"), "<br>"; echo date("H:i:s", $Zeitwerte["sec"]); ?> |
gettimeofday | |
Elemente | Bedeutung |
sec | Sekunden |
usec | Microsekunden |
minuteswest | zeitliche Abstand zu GMT |
dsttime | Korrekturfaktor zur Sommerszeit |
Im folgenden Beispiel wird die Systemzeit zu 2 verschiedenen Zeitpunkten ausgelesen
und voeinander subtrahiert. Die Funktion sleep() verzögert die folgendenden
Anweisungen, um die eingegebenen Sekunden. Die Formatierung mittels date erzeugt
immer einen Datumswert.
00:05 | <?php $Start=time(); sleep(5); $Ende=time(); $Zeit=$Ende-$Start; echo date("i:s", $Zeit); ?> |
Im folgenden Beispiel werden 2 Zeitstempel mit mktime()
erzeugt.
Dann wird einer vom anderen subtrahiert. Das Ergebnis ist ein weiterer Zeitstempel.
Von diesem werden die Tage ermittelt mit date("z", $diff)
.
Alternativ könnte man auch die gelieferten Sekunden zu Tagen dividieren.
$diff_tag = $diff_sek / 60 / 60 / 24;
287 Tage | date_default_timezone_set('Europe/Amsterdam'); $date1 = mktime(0, 0, 0, 12, 24, 2023); $date2 = mktime(0, 0, 0, 3, 12, 2023); $diff_sek = $date1 - $date2; echo date("z", $diff_sek) . " Tage"; // $diff_tag = $diff_sek / 60 / 60 / 24; |
Im folgenden wird eine Datumsdifferenz berechnet.
date_default_timezone_set('Europe/Amsterdam'); $date1 = mktime(16, 40, 0, 11, 7, 2023); $date2 = time(); $diff = $date1 - $date2;
Nun werden die Sekunden in Tage, Stunden, Minuten, Sekunden umgerechnet. intval() erzeugt eine Ganzzahl und mittels Modulo erhält man den Restwert einer Division.
Fangen wir mal hinten in der unten stehenden Gleichung an.
Teil man Sekunden durch 60 erhält man Minuten. Mittles intval() erhält man eine Ganzzahl.
intval($diff / 60); //Minuten
Die restlichen Sekunden oder der Restwert der Division wird mit Modulo ermittelt:
$diff % 60; //restliche Sekunden
In der untenstehenden Gleichung sieht es etwas anders aus, dazu später mehr.
Eine Stunde sind 60 Minuten oder 60*60 Sekunden oder 3600 Sekunden. Als Ganzahl ist es:
intval($diff / 3600); //Stunden
Die Restzeit der Stunden in Sekunden wird mit Modulo ermittelt
($diff % 3600)
Diese Sekunden als ganzzahlige Minuten erhält man:
intval(($diff % 3600) / 60); //Minuten
Da man in diesem Beispiel auch noch Tage ermitteln will muss man damit genauso verfahren. Man ermittelt die gesamte Anzahl an Tagen dann davon die Restzeit für die Stunden.
$tage = intval($diff / 86400); // 3600 * 24 $stunden = intval(($diff % 86400) / 3600); $minuten = intval(($diff % 3600) / 60); $sekunden = $diff % 60; echo "Tage: " . $tage . "<br>"; echo "Stunden: " . $stunden . "<br>"; echo "Minuten: " . $minuten . "<br>"; echo "Sekunden: " . $sekunden . "<br>";
Im folgendem Beispiel werden die Tage bis Weihnachten berechnet. Wenn der jetzige Tag hinter Weihnachten des aktuellen Jahres liegt, werden die Tage bis nächstes Jahr Weihnachten ausgerechnet.
Die Variable $xtag für den Zieltag, und $xmonat für den Zielmonat kann man leicht abändern, um anstatt Weihnachten ein anderes Zieldatum zu errechnen.
$xjahr bekommt das aktuelle Jahr.
$tagj ist der jetzige Tag als sounsovielter Tag des Jahres.
$xmas bekommt das Zieldatum mit mktime() anhand der erstellten Variablen zugewiesen.
Aus diesem Zeitstempel wird der soundsovielte Tag des Jahres in $tagx gespeichert.
In einer if-Struktur wird abgefragt ob der Zieltag kleiner ist als der heutige Tag. Daraus ergibt sich, dass der heutige Tag hinter dem Zieltag in diesem Jahr liegt oder anders ausgedrückt es ist ein Tag nach Weichnachten diesen Jahres ist. Ist das der Fall sollte $xmas einen neuen Zeitstempel bekommen, wobei das Jahr um 1 erhöht wird.
Nun braucht man nur noch einen Zeitstempel für Jetzt $jetzt = time();
damit man diesen vom $xmas subtrahieren kann.
$diff = $xmas - $jetzt;
Aus diesem Ergebnis - Zeitstempel ermittelt man mit date("z",$diff)
die Tage des Jahres und gibt sie aus.
$xtag = 24; $xmonat = 12; $xjahr = intval(date("Y")); // Y das aktuelle Jahr für den $xmas Zeitstempel $tagJ = intval(date("z")); //z der wievielte Tag im Jahr ist jetzt $xmas = mktime(0, 0, 0, $xmonat, $xtag, $xjahr); // Zeitstempel für Zieldatum $tagX = intval(date("z", $xmas)); //der wievielte Tag im Jahr ist das Zieldatum // ist der Tag im Jahr des Zieldatums kleiner als der jetzige Tag, //ist das Zieldatum in diesem Jahr schon vorbei // dann wird ein neues Zieldatum für nächstes Jahr erstellt, also, dieses Jahr + 1 if ($tagX < $tagJ) $xmas = mktime(0, 0, 0, $xmonat, $xtag, ($xjahr + 1)); $jetzt = time(); $diff = $xmas - $jetzt; echo "Bis zum " . date("d.m.Y", $xmas) . " sind es noch " . date("z", $diff) . " Tage";
Bis zum 24.12.2025 sind es noch 358 Tage
Man kann einem Feld den Typ TIMESTAMP
zuweisen mit dem Standartwert current_timestamp.
Dann wird bei jedem neuen Datensatz automatisch ein aktueller Zeitstempel erzeugt. So kann man die Datensätze danach sortieren oder filtern. Ein Timestamp hat folgendes Format:
JJJJ-MM-TT HH:MM:SS
24.12. 2023 17 Uhr 30 sähe so aus
2023-12-24 17:30:00
In phpMyAdmin wählte man für das Feld den
Typ: TIMESTAMP
Standardwert: current_timestamp
Wenn man einen Zeitstempel auf der Seite anzeigen und mit der date() Funktion formatieren will, muss man ihn mit strtotime() in einen UNIX-Timestamp konvertieren.
date("d.m.Y / H:i", strtotime($blogTabelle["zeitstempel"]));
SQL bietet die Möglichkeit Felder mit Typ TIMESTAMP oder DATE nach bestimmten Kriterien zu durchsuchen oder zu filtern. Es stehen folgende Funktionen zur Verfügung:
YEAR() MONTH() DAYOFMONTH() HOUR() MINUTE() SECOND()
SQL Beispiel
"SELECT FROM personen WHERE MONTH(geburtstag) = 5"
Es folgt eine Funktion, die das Datum mit einem deutschen Wochentag ausgibt, als Argument $Datum wird ein gültiger Datumssting erwartet,
die Trennzeichen sind frei wählbar
"01.10.05"
"30/10/2005"
oder die date Funktion mit der deutschenFormatangabe Tag.Monat.Jahr
date("d.m.y")
<?php function Wochentag($Datum) { $Tag = date("w", $Datum); ?> |
|
Montag, 17.10.05 | <?php echo Wochentag ("17.10.05"); ?> |
Montag, 17.10.05 | <?php echo Wochentag ("17.10.2005"); ?> |
Montag, 30.12.24 | <?php echo Wochentag (date("d.m.y")); ?> |
Zu Anfang der Funktion Wochentag wird ein Array gebildet, dessen Elemente die deutschen Wochentage bilden. In der folgenden If Struktur wird überprüft, ob das Argument $Datum überhaupt ein string ist. Ist das nicht der Fall, wird gleich eine Fehlermeldung ausgegeben.
Der folgende Teil wurde schon in den beiden vorigen Funktionen erklärt. (siehe oben)
$Tag = date("w", $Datum);
Hier wird mittels der date Funktion ein numerischer Wert für den Wochentag ermittelt, beginnend bei 0 für Sonntag.
$Tage[$Tag]
Dieser Wert wird dann als Index des zu Anfang gebildeten arrays $Tage übergeben.
In $Datum_komplett wird noch das eingebene Datum durch Kommata getrennt an den Wochentag angehängt
$Datum_komplett=$Tage[$Tag].", ". date("d.m.y", $Datum);
siehe date Funktion
Zum Ende wird $Datum_komplett mit return zurückgegeben.
Webdesign / PHP / mySQL / Dreamweaver MX Tipps
Copyright © Michael Albers
www.pastorpixel.de