Start · Sprachen · PHP · Referenz · variant_date_to_timestamp

variant_date_to_timestamp

Funktion

Wandelt einen COM/OLE-Variant-Datumswert (VT_DATE) in einen Unix-Zeitstempel (Integer) um.

seit PHP 5.0.0 Kategorie: misc

Signatur

variant_date_to_timestamp(variant $variant): int

Beschreibung

variant_date_to_timestamp() konvertiert einen COM-Variant-Wert vom Typ VT_DATE in einen PHP-kompatiblen Unix-Zeitstempel. VT_DATE ist das interne Datumsformat von Microsoft COM/OLE, das Datum und Uhrzeit als Gleitkommazahl seit dem 30. Dezember 1899 darstellt.

Diese Funktion ist vor allem dann nützlich, wenn PHP über die COM-Erweiterung mit Windows-Anwendungen (z. B. Microsoft Excel, Access oder andere ActiveX/COM-Server) kommuniziert und dabei Datumswerte ausgetauscht werden. Der zurückgegebene Unix-Zeitstempel lässt sich anschließend mit Standard-PHP-Funktionen wie date(), strftime() oder DateTime::createFromFormat() weiterverarbeiten.

Die Umkehroperation — also die Konvertierung eines Unix-Zeitstempels zurück in einen COM-Variant-Datumswert — übernimmt die Funktion variant_date_from_timestamp().

Hinweis: Diese Funktion ist nur auf Windows-Systemen mit aktivierter COM-Erweiterung (php_com_dotnet.dll) verfügbar und steht auf Unix/Linux nicht zur Verfügung.

Parameter

Name Typ Default Beschreibung
$variant Pflicht variant Ein COM-Variant-Objekt vom Typ VT_DATE, das das zu konvertierende Datum enthält. Typischerweise stammt dieser Wert aus einer COM-Interaktion, z. B. aus einer Excel-Zelle oder einem anderen COM-Server.

Rückgabewert

Typ
int
Beschreibung
Gibt einen Unix-Zeitstempel (Sekunden seit dem 1. Januar 1970 00:00:00 UTC) als Integer zurück, der dem im Variant enthaltenen Datumswert entspricht.

Beispiele

Excel-Datumswert per COM in Unix-Zeitstempel umwandeln

<?php
// Verbindung zu einer Excel-Datei über COM herstellen
$excel = new COM('Excel.Application');
$excel->Workbooks->Open('C:\\daten\\tabelle.xlsx');
$sheet = $excel->ActiveSheet;

// Zelle A1 enthält ein Datum (z. B. 01.01.2024)
$variantDatum = $sheet->Cells(1, 1)->Value;

// Variant-Datum in Unix-Zeitstempel umwandeln
$timestamp = variant_date_to_timestamp($variantDatum);

echo 'Unix-Zeitstempel: ' . $timestamp . PHP_EOL;
echo 'Lesbar: ' . date('d.m.Y H:i:s', $timestamp) . PHP_EOL;

$excel->Workbooks->Close();
$excel->Quit();
$excel = null;
?>
Unix-Zeitstempel: 1704067200 Lesbar: 01.01.2024 00:00:00

Manuell erzeugten Variant-Datumswert konvertieren

<?php
// Einen Variant-Datumswert aus einem Unix-Zeitstempel erstellen
$timestamp = mktime(12, 0, 0, 6, 15, 2023); // 15. Juni 2023, 12:00 Uhr

// Erst in Variant-Datum umwandeln, dann zurückkonvertieren
$variantDatum = variant_date_from_timestamp($timestamp);
$zurueck = variant_date_to_timestamp($variantDatum);

echo 'Originaler Timestamp: ' . $timestamp . PHP_EOL;
echo 'Nach Roundtrip:       ' . $zurueck . PHP_EOL;
echo 'Datum: ' . date('d.m.Y H:i:s', $zurueck) . PHP_EOL;
?>
Originaler Timestamp: 1686823200 Nach Roundtrip: 1686823200 Datum: 15.06.2023 12:00:00

// Wichtig · Fallstricke

Plattformabhängigkeit: variant_date_to_timestamp() ist ausschließlich auf Windows-Systemen verfügbar und erfordert die aktivierte PHP-COM-Erweiterung (extension=php_com_dotnet.dll in der php.ini). Auf Linux- oder macOS-Systemen ist diese Funktion nicht vorhanden.

Zeitzonenproblematik: Der zurückgegebene Unix-Zeitstempel basiert auf der lokalen Systemzeit des Windows-Systems. Bei Anwendungen, die mit UTC oder anderen Zeitzonen arbeiten, sollte die Zeitzone sorgfältig berücksichtigt werden, um unerwartete Zeitverschiebungen zu vermeiden.

Wertebereich: Das VT_DATE-Format kann Daten im Bereich vom 1. Januar 100 bis zum 31. Dezember 9999 darstellen, während Unix-Zeitstempel (als 32-Bit-Integer) nur Daten zwischen 1901 und 2038 abdecken. Auf 64-Bit-Systemen mit PHP ist der Bereich deutlich größer, dennoch sollte bei sehr alten Datumswerten Vorsicht geboten sein.