Quelltext des aktuellen Standes
<?php
declare(strict_types=1);
use OpenNIT\Core\View;
/**
* Deckt die Zeitanzeige „relativ + exakt" ab.
*
* Entscheidend ist, dass ältere Zeitpunkte den exakten Zeitpunkt sichtbar
* mitliefern, frische Angaben schlank bleiben und die Ausgabe als fertiges
* HTML sicher escaped ist.
*/
return static function (): void {
$view = new View(sys_get_temp_dir());
test('Ab einer Stunde Alter steht der exakte Zeitpunkt dahinter', function () use ($view) {
$date = date('Y-m-d H:i:s', time() - 2 * 86400);
$out = $view->relativeTimeWithDate($date);
assertTrue(str_starts_with($out, 'vor 2 Tagen'), $out);
assertTrue(str_contains($out, '<span class="time-abs">'), $out);
assertTrue(str_contains($out, date('d.m.Y, H:i', strtotime($date))), $out);
});
test('Frische Zeitpunkte bleiben ohne Datumszusatz', function () use ($view) {
$out = $view->relativeTimeWithDate(date('Y-m-d H:i:s', time() - 300));
assertSame('vor 5 Minuten', $out);
assertSame('gerade eben', $view->relativeTimeWithDate(date('Y-m-d H:i:s')));
});
test('Null ergibt weiterhin „Nie"', function () use ($view) {
assertSame('Nie', $view->relativeTimeWithDate(null));
});
test('Unlesbare Werte werden escaped durchgereicht', function () use ($view) {
$out = $view->relativeTimeWithDate('<b>kein datum</b>');
assertFalse(str_contains($out, '<b>'), $out);
});
};