LDAP を使用して Active Directory からデータを取得するために PHP スクリプトを使用しています。
「lastlogon」のユーザー値を取得すると、129937382382715990 のような数値が表示されます
これから日付/時刻を取得する方法を見つけようとしましたが、わかりません。誰か助けてもらえますか?
LDAP を使用して Active Directory からデータを取得するために PHP スクリプトを使用しています。
「lastlogon」のユーザー値を取得すると、129937382382715990 のような数値が表示されます
これから日付/時刻を取得する方法を見つけようとしましたが、わかりません。誰か助けてもらえますか?
PHP:LDAP関数ページでこのコメントを読んでください。
それらはすべて、1601年1月1日からの100ナノ秒間隔の数を表す値を持つ「間隔」日付/時刻形式を使用しています(UTC、および値0または0x7FFFFFFFFFFFFFFF、9223372036854775807は、アカウントが期限切れにならないことを示します)。https://msdn.microsoft.com/en-us/library/ms675098(v=vs.85).aspx
したがって、UNIXタイムスタンプとの間で変換する必要がある場合は、次の方法で差を簡単に計算できます。
<?php $datetime1 = new DateTime('1601-01-01'); $datetime2 = new DateTime('1970-01-01'); $interval = $datetime1->diff($datetime2); echo ($interval->days * 24 * 60 * 60) . " seconds\n"; ?>
両方の日付の差は11644473600秒です。浮動小数点の計算や、おそらく正しく計算されなかった他の数値(タイムゾーンなどを含む)に依存しないでください。
これで、LDAPフィールドから変換できます。
<?php $lastlogon = $info[$i]['lastlogon'][0]; // divide by 10.000.000 to get seconds from 100-nanosecond intervals $winInterval = round($lastlogon / 10000000); // substract seconds from 1601-01-01 -> 1970-01-01 $unixTimestamp = ($winInterval - 11644473600); // show date/time in local time zone echo date("Y-m-d H:i:s", $unixTimestamp) ."\n"; ?>
これは、1601 年 1 月 1 日 00:00:00 UT からの 100 ナノ秒のティック数です。
詳細については、ウィキペディアのシステム時間の記事を参照してください。
これはどうですか:
$timeStamp = 129937382382715990;
echo date('Y-m-d H:i:s', $timeStamp);
編集 - - -
次のことを試してみたところ、マシンの時計が10年先に設定されていない限り、この方法は機能しないことに気付きました. 以下は、おそらくさらに処理を行わない限り、上記がほとんど役に立たないことを証明するために使用したコードです..
$time = time();
echo date('Y-m-d H:i:s', $time);
echo "<br />";
$timeStamp = 129937382382715990;
echo date('Y-m-d H:i:s', $timeStamp);