2014-11-17 2 views
0

"20141114120225.0Z"와 같은 Active Directory "whenCreated"값을 아래 코드보다 MySQL datetime 형식으로 변환하는 좀 더 간단하고 우아한 방법이 있습니까?Active Direcory "whenCreated"from 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

그런가요?

<?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); 
?> 
+0

물론! 감사! – forthrin

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'); 
0

convert_ldap_time 기능에 RTRIM의 사용은 매우 올바르지 않습니다. $ ldap_time = '20160412182250.0Z'의 값 또는 마침표 앞에 '0'이있는 다른 값의 경우 함수는 false를 반환합니다. rtrim의 두 번째 인수는 제거 할 문자의 마스크이므로 '0'get의 잘라내 기가 너무 큽니다. 이를 개선하는 한 가지 방법은 입력을 14 자로 자르고 마지막에 'Z'를 다시 추가하는 것입니다. 예 :

$format = DateTime::createFromFormat('YmdHis', substr($ldap_time,0,14). 'Z');