2016-04-12 7 views
0

LDAPの "whenCreated"属性のタイムスタンプ20150527135501.0ZをPHPのタイムスタンプに変換する方法。LDAPの "whenCreated"属性のタイムスタンプ20150527135501.0ZをPHPのタイムスタンプに変換する方法は?

$justthese = array("displayname","department" , "title","samaccountname", "mail", "whenCreated"); 

$result = ldap_search($ldap,$dn , $filter ,$justthese) or die ("Search failed"); 
$info = ldap_get_entries($ldap, $result); 
print_r ($info); 
for ($i=0; $i < $info["count"]; $i++) { 
echo "Name: ".$info[$i]["displayname"][0]."<br>\n"; 
echo "Department: ".$info[$i]["department"][0]."<br>\n"; 
echo "Created: ".$info[$i]["whenCreated"][0]."<br>\n"; 
} 

私はユーザーと部門の表示名を取得します。ただし、作成されたタイムスタンプは取得されません。私のprint_r($ info);

私はタイムスタンプとして20150527135501.0Zを取得します。このタイムスタンプをPHPでどのように印刷できますか?

+0

これをエコーするときに属性が空白になったり、タイムスタンプ(またはUNIXのタイムスタンプなどの他の形式)で人間が判読可能な形式を必要とするという問題があるかどうかを明確にしますか? – ChadSikorra

+0

実際に私はprint_r($ info)を実行しようとすると両方; .OZ形式の日付を見ることができますが、{echo "Created:"} $ {$ i} ["whenCreated"] [0]には印刷されません。 "
\ n"; – Dev

+0

私の考えはおそらくそのタイムスタンプでした。どんな助力も評価されます。 – Dev

答えて

0

LDAPから返されるため、属性の場合に問題が発生する可能性があります。代わりにしてみてください:

echo "Created: ".$info[$i]["whencreated"][0]."<br>\n"; 

それはまだそれをしない場合、私はvar_dumpから$infoアレイの構造を確認する必要があると思います。

あなたは、あなたが望む任意の方法でフォーマットすることができ、実際の \DateTimeオブジェクトを取得するには、あなたが行うことができます:

preg_match("/^(\d+).?0?(([+-]\d\d)(\d\d)|Z)$/i", $info[$i]["whencreated"][0], $matches); 
    if (!isset($matches[1]) || !isset($matches[2])) { 
     throw new \Exception(sprintf('Invalid timestamp encountered: %s', $info[$i]["whencreated"][0])); 
    } 
    $tz = (strtoupper($matches[2]) == 'Z') ? 'UTC' : $matches[3].':'.$matches[4]; 
    $date = new \DateTime($matches[1], new \DateTimeZone($tz)); 

    // Now print it in any format you like 
    echo $date->format('Y-m-d H:i:s'); 

それはおそらく関数に上記を有効にするのが最善でしょう。

+0

最初の行は自分自身で働いています。チャドに感謝します。私の友人を感謝します。 – Dev

+0

問題はありません@Dev!これが問題を解決したことをうれしく思います。左のチェックマークをクリックして答えとして受け入れることを忘れないでください(: – ChadSikorra

関連する問題