是否有更紧凑和优雅的方式来转换Active Directory" whenCreated"价值如" 20141114120225.0Z"到MySQL日期时间格式比下面的代码?
if(preg_match("/^(....)(..)(..)(..)(..)(..)/", $value, $m))
$value = sprintf("%s-%s-%s %s:%s:%s", $m[1], $m[2], $m[3], $m[4], $m[5], $m[6]);
答案 0 :(得分:0)
那样的东西?
<?php
// The regexp ensures only numbers were used
$valueForMySQL = preg_replace("/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2}).+/","$1-$2-$3 $4:$5:$6", $value);
?>
答案 1 :(得分:0)
这是一个应该使用PHP的DateTime类来完成这个技巧的函数。
/**
* @param string $ldap_time
* @param string $output_format
* @return bool|string
*/
public function convert_ldap_time($ldap_time, $output_format)
{
$format = DateTime::createFromFormat('YmdHis', rtrim($ldap_time, '.0Z'));
if (!$format) $format = DateTime::createFromFormat('Ymdhis', rtrim($ldap_time, '.0Z'));
return ($format) ? $format->format($output_format) : false;
}
这将允许您执行以下操作:
$mysql_time = convert_ldap_time($whenCreated, 'Y-m-d H:i:s');
答案 2 :(得分:0)
在convert_ldap_time函数中使用rtrim并不完全正确。对于$ ldap_time ='20160412182250.0Z'的值或在该句点之前具有'0'的任何其他值,该函数将返回false。 rtrim的第二个参数是要删除的字符的掩码,所以'0'也被修剪掉了。改善这种情况的一种方法是将输入截断为14个字符,并在末尾追加“Z”。 E.g。
$format = DateTime::createFromFormat('YmdHis', substr($ldap_time,0,14). 'Z');