Zeit- und Datumsberechnung¶
Alvine biete mit den Klassen aus dem date-Namespace einige nützliche Funktionen zur Zeit- und Datumsberechnung an.
Grundlagen¶
Die Basis der Zeitberechnung ist die Klasse Quantity. Diese Klasse stellt alle notwendigen Funktionen und Eigenschaften für die Arbeit mit Datum und Zeit zur Verfügung.
$instant = new \Alvine\Date\Instant(1920, 12, 24);
echo (string)$instant; // 1920-12-24 00:00:00
// Tag der Mondlandung
$instant = new \Alvine\Date\Instant(1969, 7, 21, 2, 56, 20);
echo (string)$instant; // 1969-07-21T02:56:20
// Es erfolgt kein Überlauf, beim Überschreiten
// der einzelnen Bereiche
$instant = new \Alvine\Date\Instant(99999, 9999, 9999, 9999, 9999, 9999);
echo $instant; // 99999-9999-9999T9999:9999:9999
$quantity = new \Alvine\Date\DateTime();
echo (string)$quantity; // 0000-01-01T00:00:00
Eine konkrete Ableitung von Quantity ist die Instant-Klasse, sie definiert einen Moment, der über die Parameter Jahr, Monat, Tag, Stunde, Minute, Sekunde und Nanosekunde definiert ist. Die Klassen Date, Time und Datetime sind konkrete Ableitungen der Klasse AbstractDateTime, die wiederum von Instant abgeleitet ist.
Aktuelle Zeit¶
Wird für die weitere Verarbeitung die aktuelle Zeit benötigt,
so kann dieser über die Methode fromNow()
geholt werden.
$timestamp = \Alvine\Date\Time::fromNow();
print_r($timestamp);
echo $timestamp;echo "\r\n";
echo date('Y.m.d H:i:s');
Berechnungen¶
Mit den Methoden plus
und minus
kann Zeit angepasst werden.
Es wird ein neues Objekt zurück geliefert. Das aktuelle Objekt behält die Zeit.
Beispiele:
Wert |
---|
1 day |
2 days |
2 weeks |
3 months |
4 years |
1 year + 1 day |
1 day + 12 hours |
3600 seconds |
plus¶
Zeit hinzu zählen
/**
* aktueller Zeitpunkt
*/
$now=\Alvine\Date\DateTime::fromNow(); //2018-08-28 05:42:00
/**
* einen Tag dazu rechnen
*/
$nextDay = $now->plus('1 day');
echo $now; //2018-08-28 05:42:00
echo $nextDay; //2018-08-29 05:42:00
minus¶
Zeit hinzu zählen
/**
* aktueller Zeitpunkt
*/
$now=\Alvine\Date\DateTime::fromNow(); //2018-08-28 05:42:00
/**
* einen Tag dazu rechnen
*/
$yesterday = $now->minus('1 day');
echo $now; //2018-08-28 05:42:00
echo $yesterday; //2018-08-27 05:42:00
Spezialisierungen¶
Um bestimmte Sachverhalte besser abzubilden und unnötige Informationen auszublenden, gibt es Spezialklassen, wie die YearMonth-Klasse. Die JahrMonats-Klasse eignet sich zum Beispiel zum Speichern des "Gültig bis"-Datums von Kreditkarten.
// Gültig bis Dezember 2020
$valid=new \Alvine\Date\YearMonth(2020, 12);
echo (string) $valid; // 2020-12
Sekunden¶
Die Klasse Seconds bildet einen Sonderfall, sie ist nicht von Time, sondern von Instant abgeleitet und kann somit nicht nur Zahlen von 0 bis 59 aufnehmen, sondern auch komplette Timestamps.
Wochentag¶
Die Klasse DayOfWeek bildet den Wochentag ab.
Wert | Tag |
---|---|
1 | Montag |
2 | Dienstag |
3 | Mittwoch |
4 | Donnerstag |
5 | Freitag |
6 | Samstag |
7 | Sonntag |
/**
* aktueller Zeitpunkt
*/
$now=\Alvine\Date\DateTime::fromNow(); //2018-08-28 05:42:00
/**
* Tag der Woche bestimmen
*/
$day=\Alvine\Date\DayOfWeek::getInstanceFromDate(new \Alvine\Date\Date(1990, 12, 24));
echo $day->getValue(); // 1
Lokalisiertes Datum ausgeben¶
Die Ausgabe eines Datum kann über folgende Anweisung erfolgen.
$now=\Alvine\Date\DateTime::fromNow();
echo \sprintf('%3$02d.%2$02d.%1$02d %4$02d:%5$02d:%6$02d',
$now->getYear(),
$now->getMonth(),
$now->getDay(),
$now->getHour(),
$now->getMinute(),
$now->getSecond());