<?php
Header ('Content-Type: text/html; charset=UTF-8');
// show source
highlight_file (__FILE__, false);
echo "<hr />\n";
// einbinden des projekts
require_once 'CXDate.php';
// Informationen vom Datum abfragen:
function infosUeberDatum ($title, $date) {
echo "<div style=\"border: 1px solid red; margin: 5px; padding: 2px;\">\n";
echo "<h1 style=\"margin: 1px\">".$title."</h1>\n";
echo "Jahr: ".$date->year ()."<br />\n";
echo "Monat: ".$date->month ()."<br />\n";
echo "Tag: ".$date->day ()."<br />\n";
echo "Stunde: ".$date->hour ()."<br />\n";
echo "Minute: ".$date->minute ()."<br />\n";
echo "Sekunde: ".$date->second ()."<br />\n";
echo "Mikrosekunde: ".$date->msec ()."<br />\n";
echo "Wochentag (0 = Montag): ".$date->weekDay ()."<br />\n";
echo "Tag im Jahr: ".$date->yearDay ()."<br />\n";
if ($date->isDst ()) {
echo "Sommerzeit.<br />\n";
} else {
echo "Keine Sommerzeit.<br />\n";
}
if ($date->isDstUnique ()) {
echo "Zeitangabe ist eindeutig.<br />\n";
} else {
echo "Zeitangabe ist nicht eindeutig.<br />\n";
if ($date->usesPrevTransition ()) {
echo " [Erste Zeit]<br />\n";
} else {
echo " [Zweite Zeit]<br />\n";
}
}
echo "Offset von UTC in Sekunden: " . $date->UTCOffset ()."<br />\n";
echo "Zeitzonen-Abkürzung: " . $date->tzAbbreviation ()."<br />\n";
echo "Formatierte Ausgabe: " . $date->format ("%Y-%m-%d %T%z [%A, %a, %B, %b]")."<br />\n";
echo "Diskrete julianische Tageszahl: " . $date->jddn () . "<br / >\n";
echo "<hr />\n";
echo "<strong>Datum in UTC:</strong><br />\n";
echo "Jahr: ".$date->year (true)."<br />\n";
echo "Monat: ".$date->month (true)."<br />\n";
echo "Tag: ".$date->day (true)."<br />\n";
echo "Stunde: ".$date->hour (true)."<br />\n";
echo "Minute: ".$date->minute (true)."<br />\n";
echo "Sekunde: ".$date->second (true)."<br />\n";
echo "Mikrosekunde: ".$date->msec (true)."<br />\n";
echo "Wochentag (0 = Montag): ".$date->weekDay (true)."<br />\n";
echo "Tag im Jahr: ".$date->yearDay (true)."<br />\n";
echo "Formatierte Ausgabe: " . $date->format ("%Y-%m-%d %T%z [%A, %a, %B, %b]", null, false, true)."<br />\n";
echo "Diskrete julianische Tageszahl: " . $date->jddn (true) . "<br / >\n";
echo "</div>\n";
}
// ein neues Datumsobjekt erstellen
// Der erste Parameter ist ein assoziatives Array mit Optionen, es können
// einzelne weggelassen werden (oder der ganze Parameter) - dann werden
// Default-Werte verwendet
// Mögliche Werte:
// 'timeZone': Die Zeitzone des Datums. Wenn nicht angegeben, wird versucht,
// die System-Zeitzone so gut wie möglich zu raten (unter Windows
// funktioniert das aktuell nur bedingt, da fehlt noch Code)
// Möglich ist eine Angabe wie 'Europe/Berlin' als Referenz auf
// die Zeitzonen-Datenbank oder eine Angabe nach dem POSIX-
// Standard wie CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00 sein
// oder aber auch schlichtweg eine Zahl, die den Offset von UTC
// in Sekunden angibt
// 'calendar': Der Kalender, der zu verwenden ist; Standardeinstellung ist
// CXDATE_CAL_GJAUTO. Mögliche Werte sind:
// - CXDATE_CAL_JULIAN: Julianischer Kalender, wie er bis
// zur Kalenderreform unter Papst Gregor
// in Europa in Verwendung war.
// - CXDATE_CAL_GREGORIAN: Gregorianischer Kalender (unser
// jetztiger Kalender), erlaubt aber nur
// Daten ab dem 15.10.1582 (Inkraft-
// treten der Kalenderreform)
// - CXDATE_CAL_GJAUTO: Automatische Auswahl zwischen
// julianischem und gregorianischem
// Kalender (vor dem 15.10.1582 julianisch,
// danach gregorianisch).
// - CXDATE_CAL_ISO8601: ISO 8601 definiert als Kalender den
// gregorianischen Kalender - allerdings
// auch proleptisch, d.h. vor
// - evlt. weitere wenn Plugins geladen sind
// 'leapSecondsMode': Der Modus, wie Schaltsekunden zu behandeln sind:
// - CXDATE_LEAPSEC_IGNORE: Schaltsekunden komplett
// ignorieren.
// - CXDATE_LEAPSEC_STD: Bei normalen Berechnungen
// Schaltsekunden berücksichtigen,
// bei POSIX-Timestamps jedoch
// nicht.
// - CXDATE_LEAPSEC_ALWAYS: Immer Schaltsekunden
// berücksichtigen (verletzt
// den POSIX-Standard und ist
// inkompatibel mit so ziemlich
// jeder anderen Applikation,
// die Timestamps erzeugt)
$date = new CXDate (array (
'timeZone' => 'Europe/Berlin',
'calendar' => CXDATE_CAL_ISO8601,
'leapSecondsMode' => CXDATE_LEAPSEC_IGNORE
));
// Aktuelles Datum setzen
// (wenn erster Parameter true ist, werden Mikrosekunden berücksichtigt)
$res = $date->setCurrentDate (false);
if ($res === false || CXDate_Helpers::isError ($res)) {
echo "Fehler beim Setzen des aktuellen Datums<br />\n";
} else {
infosUeberDatum ("Aktuelles Datum (I)", $date);
}
// Kurzform für obiges
$curDate = CXDate::currentDate (false, array (
'timeZone' => 'Europe/Berlin',
'calendar' => CXDATE_CAL_ISO8601,
'leapSecondsMode' => CXDATE_LEAPSEC_IGNORE
));
if ($curDate === false || CXDate_Helpers::isError ($curDate)) {
echo "Fehler beim Holen des aktuellen Datums<br />\n";
} else {
infosUeberDatum ("Aktuelles Datum (II)", $curDate);
}
// Ein bestimmtes Datum setzen
// Dies würde den 3. Mai 2006 um 15:22:16 und 250 Millisekunden setzen
// Die letzten 3 Parameter:
// -1: Wenn das Datum nicht eindeutig wäre in der Zeitzone: Fehler
// zurückgeben (true würde dazu führen, dass die erste Zeit genommen
// wird, false, dass die zweite genommen wird)
// false: Abbrechen, falls das Datum nicht erlaubt wäre in der aktuellen
// Zeitzone (true würde heißen, es trotzdem setzen zu lassen, was
// dazu führt, dass etwas anderes (Abweichung meistens eine Stunde)
// dabei rauskommt (ist ziemlich kompliziert, das nur in ein paar
// Sätzen zu erklären))
// false: Das angegebene Datum ist Lokalzeit (true würde heißen, das Datum
// wäre UTC)
$res = $date->setDateSpec (2006, 5, 3, 15, 22, 16, 250000, -1, false, false);
if ($res === false || CXDate_Helpers::isError ($res)) {
echo "Fehler beim Setzen des bestimmten Datums<br />\n";
} else {
infosUeberDatum ("Bestimmtes Datum", $date);
}
// Eine nichteindeutige Zeitangabe setzen
$res = $date->setDateSpec (2006, 10, 29, 2, 30, 0, 0, -1, false, false);
if ($res === false || CXDate_Helpers::isError ($res)) {
// ES SOLL FEHLSCHLAGEN!
echo "Fehler beim Setzen der nichteindeutigen Zeitangabe<br />\n";
} else {
infosUeberDatum ("Nichteindeutige Zeitangabe", $date);
}
// Zeitangabe eindeutig machen
$res = $date->setDateSpec (2006, 10, 29, 2, 30, 0, 0, true, false, false);
if ($res === false || CXDate_Helpers::isError ($res)) {
echo "Fehler beim Setzen der eindeutig gemachten Zeitangabe<br />\n";
} else {
infosUeberDatum ("Nichteindeutige Zeitangabe (II)", $date);
}
// ne stunde addieren
$res = $date->increaseBy (new CXDate_Interval (0, 3600, 0));
if ($res === false || CXDate_Helpers::isError ($res)) {
echo "Fehler beim Erhöhen um eine Stunde<br />\n";
} else {
infosUeberDatum ("Nichteindeutige Zeitangabe (III)", $date);
}
// Einen POSIX-Timestamp setzen
$res = $date->setPOSIXTimeStamp (1058769744);
if ($res === false || CXDate_Helpers::isError ($res)) {
echo "Fehler beim Setzen des Timestamps<br />\n";
} else {
infosUeberDatum ("Timestamp", $date);
}
// Zeitzone ändern
$res = $date->setTimeZone ('Europe/London');
if ($res === false || CXDate_Helpers::isError ($res)) {
echo "Fehler beim Setzen der Zeitzone<br />\n";
} else {
infosUeberDatum ("Zeitzone -> Konvertieren", $date);
}
// Zeitzone ändern, dabei das Datum nicht konvertieren
$res = $date->setTimeZone ('Europe/Berlin', false);
if ($res === false || CXDate_Helpers::isError ($res)) {
echo "Fehler beim Setzen der Zeitzone (II)<br />\n";
} else {
infosUeberDatum ("Zeitzone -> nicht konvertieren", $date);
}
// Intervall von 2 Tagen und 3600 Sekunden erzeugen
// (Achtung: 1 Tag heißt bei Intervallen immer 86400 Sekunden, unabhängig davon,
// ob der Tag nicht doch 86401 Sekunden hat (Schaltsekunde)! Wenn man also
// ein Intervall der Länge 1 Tags auf 1972-06-31 00:30:00 +01:00 addiert, erhält
// man 1972-07-01 00:29:59 +01:00, außer, man schaltet
// Schaltsekundenunterstützung ab)
$iv = new CXDate_Interval (2, 3600, 0);
// Addiere das Intevall auf das datum
$res = $date->increaseBy ($iv);
if ($res === false || CXDate_Helpers::isError ($res)) {
echo "Fehler beim Setzen der Zeitzone (II)<br />\n";
} else {
infosUeberDatum ("Datum: 2 * 86400 + 3600 Sekunden addiert", $date);
}
// aktuelles datum, Hebräischer Kalender
// (Hinweis: der hebräische Tag fängt um 18:00 des Vortages an, daher nicht
// wundern, dass die Zeitangabe anders als erwartet ist oder nach 18:00 schon
// das Datum von morgen angezeigt wird)
require_once 'CXDate/Calendar/Hebrew.php';
$curDate = CXDate::currentDate (false, array (
'timeZone' => 'Europe/Berlin',
'calendar' => CXDATE_CAL_HEBREW,
'leapSecondsMode' => CXDATE_LEAPSEC_IGNORE
));
if ($curDate === false || CXDate_Helpers::isError ($curDate)) {
echo "Fehler beim Holen des aktuellen Datums<br />\n";
} else {
// hier wird das Formatieren nicht klappen, da das Default-Locale
// keinen hebräischen Kalender unterstüzt (und Tishri ist nunmal nicht
// Juli).
infosUeberDatum ("Aktuelles Datum, Hebräischer Kalender", $curDate);
}
// Datum einer Schaltsekunde setzen
$date = new CXDate (array (
'timeZone' => 'Europe/Berlin',
'calendar' => CXDATE_CAL_ISO8601,
'leapSecondsMode' => CXDATE_LEAPSEC_STD
));
$res = $date->setDateSpec (2006, 1, 1, 0, 59, 60, 0, -1, false, false);
if ($res === false || CXDate_Helpers::isError ($res)) {
echo "Fehler beim Setzen der Schaltsekunde<br />\n";
} else {
infosUeberDatum ("Schaltsekunde", $date);
}
// etwas später setzen um zu zeigen, dass das kein Trick ist
$res = $date->setDateSpec (2006, 1, 1, 1, 59, 60, 0, -1, false, false);
if ($res === false || CXDate_Helpers::isError ($res)) {
echo "Fehler beim Setzen der Nicht-Schaltsekunde<br />\n";
} else {
infosUeberDatum ("Keine Schaltsekunde", $date);
}
?>
Aktuelles Datum (I)
Jahr: 2025
Monat: 10
Tag: 11
Stunde: 8
Minute: 43
Sekunde: 44
Mikrosekunde: 0
Wochentag (0 = Montag): 5
Tag im Jahr: 284
Sommerzeit.
Zeitangabe ist eindeutig.
Offset von UTC in Sekunden: 7200
Zeitzonen-Abkürzung: CEST
Formatierte Ausgabe: 2025-10-11 08:43:44+0200 [Saturday, Sat, October, Oct]
Diskrete julianische Tageszahl: 2460960
Datum in UTC:
Jahr: 2025
Monat: 10
Tag: 11
Stunde: 6
Minute: 43
Sekunde: 44
Mikrosekunde: 0
Wochentag (0 = Montag): 5
Tag im Jahr: 284
Formatierte Ausgabe: 2025-10-11 06:43:44+0000 [Saturday, Sat, October, Oct]
Diskrete julianische Tageszahl: 2460960
Aktuelles Datum (II)
Jahr: 2025
Monat: 10
Tag: 11
Stunde: 8
Minute: 43
Sekunde: 44
Mikrosekunde: 0
Wochentag (0 = Montag): 5
Tag im Jahr: 284
Sommerzeit.
Zeitangabe ist eindeutig.
Offset von UTC in Sekunden: 7200
Zeitzonen-Abkürzung: CEST
Formatierte Ausgabe: 2025-10-11 08:43:44+0200 [Saturday, Sat, October, Oct]
Diskrete julianische Tageszahl: 2460960
Datum in UTC:
Jahr: 2025
Monat: 10
Tag: 11
Stunde: 6
Minute: 43
Sekunde: 44
Mikrosekunde: 0
Wochentag (0 = Montag): 5
Tag im Jahr: 284
Formatierte Ausgabe: 2025-10-11 06:43:44+0000 [Saturday, Sat, October, Oct]
Diskrete julianische Tageszahl: 2460960
Bestimmtes Datum
Jahr: 2006
Monat: 5
Tag: 3
Stunde: 15
Minute: 22
Sekunde: 16
Mikrosekunde: 250000
Wochentag (0 = Montag): 2
Tag im Jahr: 123
Sommerzeit.
Zeitangabe ist eindeutig.
Offset von UTC in Sekunden: 7200
Zeitzonen-Abkürzung: CEST
Formatierte Ausgabe: 2006-05-03 15:22:16+0200 [Wednesday, Wed, May, May]
Diskrete julianische Tageszahl: 2453859
Datum in UTC:
Jahr: 2006
Monat: 5
Tag: 3
Stunde: 13
Minute: 22
Sekunde: 16
Mikrosekunde: 250000
Wochentag (0 = Montag): 2
Tag im Jahr: 123
Formatierte Ausgabe: 2006-05-03 13:22:16+0000 [Wednesday, Wed, May, May]
Diskrete julianische Tageszahl: 2453859
Fehler beim Setzen der nichteindeutigen Zeitangabe
Nichteindeutige Zeitangabe (II)
Jahr: 2006
Monat: 10
Tag: 29
Stunde: 2
Minute: 30
Sekunde: 0
Mikrosekunde: 0
Wochentag (0 = Montag): 6
Tag im Jahr: 302
Sommerzeit.
Zeitangabe ist nicht eindeutig.
[Erste Zeit]
Offset von UTC in Sekunden: 7200
Zeitzonen-Abkürzung: CEST
Formatierte Ausgabe: 2006-10-29 02:30:00+0200 [Sunday, Sun, October, Oct]
Diskrete julianische Tageszahl: 2454038
Datum in UTC:
Jahr: 2006
Monat: 10
Tag: 29
Stunde: 0
Minute: 30
Sekunde: 0
Mikrosekunde: 0
Wochentag (0 = Montag): 6
Tag im Jahr: 302
Formatierte Ausgabe: 2006-10-29 00:30:00+0000 [Sunday, Sun, October, Oct]
Diskrete julianische Tageszahl: 2454038
Nichteindeutige Zeitangabe (III)
Jahr: 2006
Monat: 10
Tag: 29
Stunde: 2
Minute: 30
Sekunde: 0
Mikrosekunde: 0
Wochentag (0 = Montag): 6
Tag im Jahr: 302
Keine Sommerzeit.
Zeitangabe ist nicht eindeutig.
[Zweite Zeit]
Offset von UTC in Sekunden: 3600
Zeitzonen-Abkürzung: CET
Formatierte Ausgabe: 2006-10-29 02:30:00+0100 [Sunday, Sun, October, Oct]
Diskrete julianische Tageszahl: 2454038
Datum in UTC:
Jahr: 2006
Monat: 10
Tag: 29
Stunde: 1
Minute: 30
Sekunde: 0
Mikrosekunde: 0
Wochentag (0 = Montag): 6
Tag im Jahr: 302
Formatierte Ausgabe: 2006-10-29 01:30:00+0000 [Sunday, Sun, October, Oct]
Diskrete julianische Tageszahl: 2454038
Timestamp
Jahr: 2003
Monat: 7
Tag: 21
Stunde: 8
Minute: 42
Sekunde: 24
Mikrosekunde: 0
Wochentag (0 = Montag): 0
Tag im Jahr: 202
Sommerzeit.
Zeitangabe ist eindeutig.
Offset von UTC in Sekunden: 7200
Zeitzonen-Abkürzung: CEST
Formatierte Ausgabe: 2003-07-21 08:42:24+0200 [Monday, Mon, July, Jul]
Diskrete julianische Tageszahl: 2452842
Datum in UTC:
Jahr: 2003
Monat: 7
Tag: 21
Stunde: 6
Minute: 42
Sekunde: 24
Mikrosekunde: 0
Wochentag (0 = Montag): 0
Tag im Jahr: 202
Formatierte Ausgabe: 2003-07-21 06:42:24+0000 [Monday, Mon, July, Jul]
Diskrete julianische Tageszahl: 2452842
Zeitzone -> Konvertieren
Jahr: 2003
Monat: 7
Tag: 21
Stunde: 7
Minute: 42
Sekunde: 24
Mikrosekunde: 0
Wochentag (0 = Montag): 0
Tag im Jahr: 202
Sommerzeit.
Zeitangabe ist eindeutig.
Offset von UTC in Sekunden: 3600
Zeitzonen-Abkürzung: BST
Formatierte Ausgabe: 2003-07-21 07:42:24+0100 [Monday, Mon, July, Jul]
Diskrete julianische Tageszahl: 2452842
Datum in UTC:
Jahr: 2003
Monat: 7
Tag: 21
Stunde: 6
Minute: 42
Sekunde: 24
Mikrosekunde: 0
Wochentag (0 = Montag): 0
Tag im Jahr: 202
Formatierte Ausgabe: 2003-07-21 06:42:24+0000 [Monday, Mon, July, Jul]
Diskrete julianische Tageszahl: 2452842
Zeitzone -> nicht konvertieren
Jahr: 2003
Monat: 7
Tag: 21
Stunde: 7
Minute: 42
Sekunde: 24
Mikrosekunde: 0
Wochentag (0 = Montag): 0
Tag im Jahr: 202
Sommerzeit.
Zeitangabe ist eindeutig.
Offset von UTC in Sekunden: 7200
Zeitzonen-Abkürzung: CEST
Formatierte Ausgabe: 2003-07-21 07:42:24+0200 [Monday, Mon, July, Jul]
Diskrete julianische Tageszahl: 2452842
Datum in UTC:
Jahr: 2003
Monat: 7
Tag: 21
Stunde: 5
Minute: 42
Sekunde: 24
Mikrosekunde: 0
Wochentag (0 = Montag): 0
Tag im Jahr: 202
Formatierte Ausgabe: 2003-07-21 05:42:24+0000 [Monday, Mon, July, Jul]
Diskrete julianische Tageszahl: 2452842
Datum: 2 * 86400 + 3600 Sekunden addiert
Jahr: 2003
Monat: 7
Tag: 23
Stunde: 8
Minute: 42
Sekunde: 24
Mikrosekunde: 0
Wochentag (0 = Montag): 2
Tag im Jahr: 204
Sommerzeit.
Zeitangabe ist eindeutig.
Offset von UTC in Sekunden: 7200
Zeitzonen-Abkürzung: CEST
Formatierte Ausgabe: 2003-07-23 08:42:24+0200 [Wednesday, Wed, July, Jul]
Diskrete julianische Tageszahl: 2452844
Datum in UTC:
Jahr: 2003
Monat: 7
Tag: 23
Stunde: 6
Minute: 42
Sekunde: 24
Mikrosekunde: 0
Wochentag (0 = Montag): 2
Tag im Jahr: 204
Formatierte Ausgabe: 2003-07-23 06:42:24+0000 [Wednesday, Wed, July, Jul]
Diskrete julianische Tageszahl: 2452844
Aktuelles Datum, Hebräischer Kalender
Jahr: 5786
Monat: 7
Tag: 19
Stunde: 14
Minute: 43
Sekunde: 44
Mikrosekunde: 0
Wochentag (0 = Montag): 5
Tag im Jahr: 19
Sommerzeit.
Zeitangabe ist eindeutig.
Offset von UTC in Sekunden: 7200
Zeitzonen-Abkürzung: CEST
Formatierte Ausgabe:
Diskrete julianische Tageszahl: 2460960
Datum in UTC:
Jahr: 5786
Monat: 7
Tag: 19
Stunde: 12
Minute: 43
Sekunde: 44
Mikrosekunde: 0
Wochentag (0 = Montag): 5
Tag im Jahr: 19
Formatierte Ausgabe:
Diskrete julianische Tageszahl: 2460960
Schaltsekunde
Jahr: 2006
Monat: 1
Tag: 1
Stunde: 0
Minute: 59
Sekunde: 60
Mikrosekunde: 0
Wochentag (0 = Montag): 6
Tag im Jahr: 1
Keine Sommerzeit.
Zeitangabe ist eindeutig.
Offset von UTC in Sekunden: 3600
Zeitzonen-Abkürzung: CET
Formatierte Ausgabe: 2006-01-01 00:59:60+0100 [Sunday, Sun, January, Jan]
Diskrete julianische Tageszahl: 2453737
Datum in UTC:
Jahr: 2005
Monat: 12
Tag: 31
Stunde: 23
Minute: 59
Sekunde: 60
Mikrosekunde: 0
Wochentag (0 = Montag): 5
Tag im Jahr: 365
Formatierte Ausgabe: 2005-12-31 23:59:60+0000 [Saturday, Sat, December, Dec]
Diskrete julianische Tageszahl: 2453736
Keine Schaltsekunde
Jahr: 2006
Monat: 1
Tag: 1
Stunde: 2
Minute: 0
Sekunde: 0
Mikrosekunde: 0
Wochentag (0 = Montag): 6
Tag im Jahr: 1
Keine Sommerzeit.
Zeitangabe ist eindeutig.
Offset von UTC in Sekunden: 3600
Zeitzonen-Abkürzung: CET
Formatierte Ausgabe: 2006-01-01 02:00:00+0100 [Sunday, Sun, January, Jan]
Diskrete julianische Tageszahl: 2453737
Datum in UTC:
Jahr: 2006
Monat: 1
Tag: 1
Stunde: 1
Minute: 0
Sekunde: 0
Mikrosekunde: 0
Wochentag (0 = Montag): 6
Tag im Jahr: 1
Formatierte Ausgabe: 2006-01-01 01:00:00+0000 [Sunday, Sun, January, Jan]
Diskrete julianische Tageszahl: 2453737