Intereting Posts
Facebook API: как публиковать на собственной стене приложения без входа в систему Включить mysqli в моей копии веб-сервера php PHP Может ли клиент когда-либо устанавливать переменные $ _SESSION? Загрузка файлов Zip, но недействительна? Каковы различия между обратным ходом и одинарной кавычкой? Могу ли я использовать оператор IF в запросе, как указано выше? Как сделать этот код повторно используемым для разных видов? Правильный метод Код загрузки файла Angularjs Хранение арабских слов с использованием Apache Solr 3.6.1 iPhone Push Notification – проблема с ответом на ошибку Загружать одну и ту же карту ACF дважды на той же странице Как сделать регистр имени пользователя нечувствительным в zf2 Go Daddy и magic_quotes_gpc Открытие документа Word в режиме чтения с использованием php? В PHP, почему я могу получить доступ к нестационарному методу статическим способом? Как получить значки сайта с PHP?

Как преобразовать временную метку LDAP в временную метку Unix

Когда я получаю атрибут LDAP «pwdLastSet» в Active Directory с помощью PHP, я получаю значение, подобное 1.29265206716E + 17. Я знаю, что это значение представляет дату «Вт 17 авг 2010 14:11:11 GMT + 0200».

Как преобразовать это значение в временную метку Unix в PHP? Спасибо за любые подсказки!

Пожалуйста, смотрите здесь .

На самом деле это сводится к преобразованию FILETIME времени FILETIME метку времени UNIX:

 $fileTime = "130435290000000000"; $winSecs = (int)($fileTime / 10000000); // divide by 10 000 000 to get seconds $unixTimestamp = ($winSecs - 11644473600); // 1.1.1600 -> 1.1.1970 difference in seconds echo date(DateTime::RFC822, $unixTimestamp); 

@etranger – коррекция: должна быть отметка времени от 1601 вместо 1600. См. официальный веб-сайт Microsoft: http://msdn.microsoft.com/en-us/library/ms675243%28v=vs.85%29.aspx

Эта страница говорит о том, что она «100-наносекундная единица прошла с 1.1.1601 00:00:00», это может быть полезно.

EDIT: 1600 »» 1601

 $dateLargeInt= "1.29265206716E+17"; // nano seconds since jan 1st 1601 $secsAfterADEpoch = $dateLargeInt / (10000000); // seconds since jan 1st 1601 $ADToUnixConvertor=((1970-1601) * 365.242190) * 86400; // unix epoch - AD epoch * number of tropical days * seconds in a day $unixTsLastLogon=intval($secsAfterADEpoch-$ADToUnixConvertor); // unix Timestamp version of AD timestamp $lastlogon=date("dmY", $unixTsLastLogon); // formatted date 

Подробнее см. http://php.net/manual/en/ref.ldap.php.

Я думаю, что первый шаг – понять, что значения LDAP действительно означают – как только вы поймете, что все остальное легко.

Существует несколько атрибутов LDAP, связанных с датами. pwdLastSet и accountExpires имеют значения, такие как 127524839567199000, а whenChanged имеет значения, такие как 20050210223453.0Z – и оба значения относятся к той же дате 10-FEB-2005 .

Для простого объяснения см. http://maxvit.net/convert_ldap_dates

Надеюсь это поможет!