Signatur
Beschreibung
variant_date_from_timestamp() konvertiert einen Unix-Zeitstempel (Sekunden seit dem 1. Januar 1970 UTC) in einen COM-kompatiblen variant-Wert vom Typ VT_DATE. Dieser Datentyp wird im Windows-COM/OLE-Ökosystem verwendet, um Datum und Uhrzeit als Gleitkommazahl darzustellen, wobei der ganzzahlige Anteil die Tage seit dem 30. Dezember 1899 und der Nachkommaanteil die Tageszeit repräsentiert.
Die Funktion ist nützlich, wenn PHP über die COM-Erweiterung mit Windows-Anwendungen wie Microsoft Excel, Access oder anderen ActiveX-Komponenten kommuniziert und ein Datum in einem Format übergeben werden muss, das diese Applikationen nativ verstehen.
Der zurückgegebene variant-Wert kann direkt an COM-Methoden und -Eigenschaften übergeben werden, die ein DATE-Argument erwarten, ohne dass eine manuelle Umrechnung nötig ist.
Die Funktion steht nur unter Windows zur Verfügung, da sie von der PHP-COM-Erweiterung (ext/com_dotnet) bereitgestellt wird.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $timestamp Pflicht | int | Ein Unix-Zeitstempel (Sekunden seit dem 1. Januar 1970 00:00:00 UTC), der in eine COM-Datumsdarstellung umgewandelt werden soll. |
Rückgabewert
variant-Wert vom Typ VT_DATE zurück, der den übergebenen Zeitstempel als COM-Datum (OLE Automation Date) repräsentiert.Beispiele
Aktuelles Datum als COM-Variant erzeugen
<?php
// Aktuellen Unix-Zeitstempel in eine COM-Datumsdarstellung umwandeln
$timestamp = time();
$variantDate = variant_date_from_timestamp($timestamp);
echo "Unix-Zeitstempel : " . $timestamp . "\n";
echo "Variant-Typ : " . variant_get_type($variantDate) . "\n";
// Zur Kontrolle: zurück in einen Unix-Zeitstempel konvertieren
$back = variant_date_to_timestamp($variantDate);
echo "Zurückgewandelt : " . $back . "\n";
echo "Identisch? : " . ($timestamp === $back ? 'Ja' : 'Nein') . "\n";
Datum an eine Excel-COM-Instanz übergeben
<?php
// Beispiel: Excel-Zelle mit einem Datum über COM befüllen
// (Erfordert Windows mit installiertem Microsoft Excel)
try {
$excel = new COM('Excel.Application');
$excel->Visible = true;
$workbook = $excel->Workbooks->Add();
$sheet = $workbook->Worksheets(1);
// Unix-Zeitstempel für den 1. Januar 2024 00:00:00 UTC
$timestamp = mktime(0, 0, 0, 1, 1, 2024);
// Als COM-Datumsvariant konvertieren und in Zelle A1 schreiben
$sheet->Cells(1, 1)->Value = variant_date_from_timestamp($timestamp);
$sheet->Cells(1, 1)->NumberFormat = 'DD.MM.YYYY';
echo "Datum erfolgreich in Excel-Zelle A1 eingetragen.\n";
} catch (Exception $e) {
echo "COM-Fehler: " . $e->getMessage() . "\n";
}
// Wichtig · Fallstricke
Plattformbeschränkung: Diese Funktion ist ausschließlich unter Windows verfügbar und erfordert die aktivierte PHP-COM/DOTNET-Erweiterung (extension=com_dotnet in der php.ini). Auf Linux- oder macOS-Systemen ist sie nicht verfügbar.
Zeitzonen: Unix-Zeitstempel sind UTC-basiert. Das erzeugte COM-Datum kann je nach Anwendung und deren Zeitzoneneinstellungen unterschiedlich interpretiert werden. Bei zeitzonenempfindlichen Anwendungen sollte die Umrechnung sorgfältig geprüft werden.
Wertebereich: Negative Unix-Zeitstempel (Daten vor 1970) werden unterstützt, solange das entsprechende Datum im darstellbaren Bereich des OLE Automation Date-Formats liegt (ab dem 1. Januar 100 n. Chr.).