Nach langem Hin und Her habe ich endlich herausgefunden warum die Werte lastlogon und accountexpires im Active Directory sich mit der PHP Funktion date() nicht richtig darstellen lassen.
Und zwar hatte ich nicht bedacht das Microsoft eine eigene Art Timestamp verwendet (warum hat mich das nicht überrascht?). Dieser beginnt nicht wie der weit verbreitete Unix Timestamp am 1. Januar 1970 um 00:00 sondern am 1. Januar 1601 um 00:00 und wird nicht in Sekunden sondern in Nanosekunden angegeben.
Hier mal die Funktion mit der ich das Umrechne.
function ADStoUnixTime($adtime) {
/* von Nanosekunden auf Sekunden */
$secsAfterADEpoch = $adtime / (10000000);
/* (((Unix - ADS) * Tage pro Jahr) * Sekunden pro Tag) */
$ADToUnixConvertor=((1970-1601) * 365.242190) * 86400;
/* Unix Timestamp */
$unixtimestamp=intval($secsAfterADEpoch-$ADToUnixConvertor);
return $unixtimestamp;
}
Recent Comments