如何将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 :(得分: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');
最好将上述内容变成一个函数。