PHP - Datum und Uhrzeit formatiert ausgeben

Möchte man das Datum mit mehr Informationen anzeigen (Vorgestern, Gestern, Heute, vor 3 Jahren, vor 12 Minuten, in 8 Minuten, in 5 Tagen, in 2 Monaten, ... etc.) dann ist diese Funktion hilfreich.

Die Eingabe erfolgt im Format: YYYY-MM-DD HH:II:SS (ISO 8601)

Folgende Zeitangaben werden ausgeben, hier einige Beispiele:

2018-01-04 22:30:07  <?=datetime('2018-01-04 22:30:07');?>
➧ am 4.1.2018

2018-01-04 22:30:07  <?=datetime('2018-01-04 22:30:07', true);?>
➧ am Donnerstag, den 4 Januar 2018

2018-01-04 22:30:07  <?=datetime('2018-01-04 22:30:07', true, true);?>
➧ am Donnerstag, den 4 Januar 2018 (vor 3 Jahren)


2020-11-28 23:01:14  <?=datetime('2020-11-28 23:01:14');?>
➧ Heute um 23:01 Uhr

2020-11-28 23:01:14  <?=datetime('2020-11-28 23:01:14', true, true);?>
➧ Heute um 23:01 Uhr (vor 12 Minuten)


2020-11-27 23:13:14  <?=datetime('2020-11-27 23:13:14');?>
➧ Gestern um 23:13 Uhr

2020-11-26 23:13:14  <?=datetime('2020-11-26 23:13:14');?>
➧ Vorgestern um 23:13 Uhr

2020-11-26 23:13:14  <?=datetime('2020-11-26 23:13:14', false, true);?>
➧ Vorgestern um 23:13 Uhr (vor 2 Tagen)


2021-01-07 23:13:14  <?=datetime('2021-01-07 23:13:14');?>
➧ am 7.1.2021

2021-01-07 23:13:14  <?=datetime('2021-01-07 23:13:14', true);?>
➧ am Donnerstag, den 7 Januar 2021

2020-11-29 03:13:14  <?=datetime('2020-11-29 03:13:14', true, true);?>
➧ Morgen um 03:13 Uhr (in 4 Stunden)

2020-11-29 23:13:14  <?=datetime('2020-11-29 23:13:14', true, true);?>
➧ Morgen um 23:13 Uhr (in 1 Tag)

2020-11-30 23:13:14  <?=datetime('2020-11-30 23:13:14', true, true);?>
➧ Übermorgen um 23:13 Uhr (in 2 Tagen)

2020-12-03 23:13:14  <?=datetime('2020-12-03 23:13:14', true, true);?>
➧ am Donnerstag, den 3 Dezember 2020 (in 5 Tagen)

2021-01-07 23:13:14  <?=datetime('2021-01-07 23:13:14', true, true);?>
➧ am Donnerstag, den 7 Januar 2021 (in 1 Monat)

2021-01-29 23:13:14  <?=datetime('2021-01-29 23:13:14', true, true);?>
➧ am Freitag, den 29 Januar 2021 (in 2 Monaten)

2029-02-28 23:13:14  <?=datetime('2029-02-28 23:13:14', true, true);?>
➧ am Mittwoch, den 28 Februar 2029 (in 8 Jahren)


Letzte Aktualisierung: am Mittwoch, den 4 November 2020 (vor 4 Wochen)

Letzte Aktualisierung: 
<?php
$aktuell 
date("Y-m-d H:i:s"filemtime(basename($_SERVER["SCRIPT_NAME"])));
echo 
datetime($aktuelltruetrue);
?>

Die Funktion

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<?php
// Datum und Uhrzeit formatiert ausgeben

// $datetime = YYYY-MM-DD HH:II:SS
function datetime($datetime,
                           
$wochentagMonat false,
                           
$niceDate false) {

 
sscanf($datetime"%4s-%2s-%2s %2s:%2s:%2s"$jahr$monat$tag$stunde$minute$sekunde);

 if (
$niceDate) {
  
$niceDate ' (' niceDate($tag$monat$jahr$stunde$minute$sekunde) . ')';
 }
 else {
  
$niceDate '';
 }

 
$datum mktime(000date($monat), date($tag), date($jahr));

 
// Heute
 
if ($datum == mktime(000date("m"), date("d"), date("Y"))) {
  return 
'Heute um ' $stunde ':' $minute ' Uhr' $niceDate;
 }
 
// Gestern
 
else if ($datum == mktime(000date("m"), date("d") - 1date("Y"))) {
  return 
'Gestern um ' $stunde ':' $minute ' Uhr' $niceDate;
 }
 
// Vorgestern
 
else if ($datum == mktime(000date("m"), date("d") - 2date("Y"))) {
  return 
'Vorgestern um ' $stunde ':' $minute ' Uhr' $niceDate;
 }
 
// Morgen
 
else if ($datum == mktime(000date("m"), date("d") + 1date("Y"))) {
  return 
'Morgen um ' $stunde ':' $minute ' Uhr' $niceDate;
 }
 
// Übermorgen
 
else if ($datum == mktime(000date("m"), date("d") + 2date("Y"))) {
  return 
'Übermorgen um ' $stunde ':' $minute ' Uhr' $niceDate;
 }
 else {
  if (
$wochentagMonat == false) {
   return 
'am ' floor($tag) . '.' floor($monat) . '.' $jahr $niceDate;
  }
  else {
   return 
'am ' wochentag($tag$monat$jahr) . ', den ' floor($tag) . ' ' monat($monat) . ' ' $jahr $niceDate;
  }
 }
}


function 
niceDate($tag$monat$jahr$stunde$minute$sekunde) {

 
$timestamp mktime($stunde$minute$sekunde$monat$tag$jahr);
 
$difference time() - $timestamp;
 
$periods = ["Sekunde",
                     
"Minute",
                     
"Stunde",
                     
"Tage",
                     
"Woche",
                     
"Monate",
                     
"Jahre",
                     
"Jahrzehnte"
            ];
 
$lengths = ["60""60""24""7""4.35""12""10"];

 if (
$difference > 0) {
  
// Vergangenheit
  
$ending "vor";
 }
 else {
  
// Zukunft
  
$difference = -$difference;
  
$ending "in";
 }

 for (
$j 0$difference >$lengths[$j]; $j++) {
  
$difference /= $lengths[$j];
  
$difference round($difference);
 }

 if (
$difference != 1) {
  
$periods[$j] .= "n";
 }
 else {
  if (
$periods[$j] == "Woche" ||
      
$periods[$j] == "Stunde" ||
      
$periods[$j] == "Minute" ||
      
$periods[$j] == "Sekunde") {
    
$periods[$j] = $periods[$j];
  }
  else {
   
$periods[$j] = substr($periods[$j], 0, -1);
  }
 }
 return 
$ending ' ' $difference ' ' $periods[$j];
}


// Wochentag ermitteln
function wochentag($tag$monat$jahr) {
 
$tage = ["Sonntag""Montag""Dienstag""Mittwoch""Donnerstag""Freitag""Samstag"];
 
$wt getdate(mktime(000$monat$tag$jahr));
 return 
$tage[$wt["wday"]];
}


// Monat ermitteln
function monat($monat) {
 
$monate = [=> "Januar""Februar""März""April""Mai""Juni""Juli""August""September",
  
"Oktober""November""Dezember"];
 return 
$monate[floor($monat)];
}
?>

Bausteine  [Alle Anzeigen]

Eine zufällige Auswahl von Bausteinen (Snippets) aus den Bereichen CSS, PHP, JavaScript und MySQL.

CSS - Bild mit Impuls

PHP - Suchen und hervorheben mit preg_replace_callback()

JavaScript - HTML-Button über JavaScript eine Funktion zuweisen

MySQL - Mit mehreren Begriffen gleichzeitig suchen