如何将LDAP“whenCreated”属性时间戳20150527135501.0Z转换为PHP中的时间戳?

时间:2016-04-12 00:16:54

标签: php ldap timestamp

如何将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中打印此时间戳?

1 个答案:

答案 0 :(得分:0)

问题可能出在属性的情况下,因为它是从LDAP返回的。而是尝试:

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

如果仍然没有这样做,我需要从$info查看var_dump数组的结构。

要获得一个实际的\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');

最好将上述内容变成一个函数。