DateFormatter.php
- Pfad:
src/Infrastructure/Formatter/DateFormatter.php - Namespace: Infrastructure\Formatter
- Zeilen: 131 | Größe: 3,150 Bytes
- Geändert: 2025-12-23 08:06:27 | Gescannt: 2025-12-31 10:22:15
Code Hygiene Score: 100
- Dependencies: 100 (25%)
- LOC: 100 (20%)
- Methods: 100 (20%)
- Secrets: 100 (15%)
- Classes: 100 (10%)
- Magic Numbers: 100 (10%)
Keine Issues gefunden.
Dependencies 2
- use DateTimeImmutable
- use DateTimeInterface
Klassen 1
-
DateFormatterclass Zeile 12
Funktionen 7
-
short()public Zeile 23 -
dateTime()public Zeile 35 -
longGerman()public Zeile 47 -
iso()public Zeile 61 -
relative()public Zeile 73 -
time()Zeile 114 -
parse()Zeile 126
Versionen 1
-
v1
2025-12-23 08:06 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
Code
<?php
declare(strict_types=1);
namespace Infrastructure\Formatter;
// @responsibility: Formatiert Datums-/Zeitwerte konsistent (DE-Format)
use DateTimeImmutable;
use DateTimeInterface;
final class DateFormatter
{
private const GERMAN_MONTHS = [
1 => 'Januar', 2 => 'Februar', 3 => 'März', 4 => 'April',
5 => 'Mai', 6 => 'Juni', 7 => 'Juli', 8 => 'August',
9 => 'September', 10 => 'Oktober', 11 => 'November', 12 => 'Dezember',
];
/**
* Format as short date (dd.mm.yyyy).
*/
public function short(?string $datetime): string
{
if ($datetime === null || $datetime === '') {
return '';
}
return $this->parse($datetime)->format('d.m.Y');
}
/**
* Format as date with time (dd.mm.yyyy HH:mm).
*/
public function dateTime(?string $datetime): string
{
if ($datetime === null || $datetime === '') {
return '';
}
return $this->parse($datetime)->format('d.m.Y H:i');
}
/**
* Format as long German date (1. Januar 2025).
*/
public function longGerman(?string $datetime): string
{
if ($datetime === null || $datetime === '') {
return '';
}
$date = $this->parse($datetime);
return $date->format('j') . '. ' . self::GERMAN_MONTHS[(int) $date->format('n')] . ' ' . $date->format('Y');
}
/**
* Format as ISO 8601 (for APIs).
*/
public function iso(?string $datetime): string
{
if ($datetime === null || $datetime === '') {
return '';
}
return $this->parse($datetime)->format(DateTimeInterface::ATOM);
}
/**
* Format as relative time (vor 5 Minuten, gestern, etc.).
*/
public function relative(?string $datetime): string
{
if ($datetime === null || $datetime === '') {
return '';
}
$date = $this->parse($datetime);
$now = new DateTimeImmutable();
$diff = $now->diff($date);
if ($diff->invert === 0) {
// Future date
return $this->dateTime($datetime);
}
if ($diff->days === 0) {
if ($diff->h === 0) {
if ($diff->i === 0) {
return 'gerade eben';
}
return $diff->i === 1 ? 'vor 1 Minute' : "vor {$diff->i} Minuten";
}
return $diff->h === 1 ? 'vor 1 Stunde' : "vor {$diff->h} Stunden";
}
if ($diff->days === 1) {
return 'gestern';
}
if ($diff->days < 7) {
return "vor {$diff->days} Tagen";
}
return $this->short($datetime);
}
/**
* Format time only (HH:mm).
*/
public function time(?string $datetime): string
{
if ($datetime === null || $datetime === '') {
return '';
}
return $this->parse($datetime)->format('H:i');
}
/**
* Parse a datetime string.
*/
private function parse(string $datetime): DateTimeImmutable
{
return new DateTimeImmutable($datetime);
}
}