2011-08-17 3 views
0

내 프로젝트의 드릴 시간 그래프를 작성 중입니다.PHP + MySQL : 숫자로 된 문자열로 된 시간

현재 DB에는 드릴 지속 시간이 시간 필드로 저장됩니다. 시간은 MM : SS 형식으로 검색되므로 5 분 30 초는 05:으로 표현됩니다. 내가 선택한 그래프 패키지 (jpgraph)에는 숫자 값이 그래프로 배열로 전달되어야합니다.

I이 얻을 아래 코드를 사용해 :

어레이 ([0] =>를 0시 3분 25초 [1] => 0시 4분 23초 [2] => 0시 3분 48초 [3 ] => 00:02:48 [4] => 00:03:09 [5] => 00:02:25)

00:03:25가 문자열로 저장되는 방식을 추측하고 있습니다 (어떤 방법으로 동적 유형을 확인할 수 있습니까?).

A)는 소수 분으로 표현 :

어레이 ([0] => 3.417 [1] => 4.383 [2] => 3.800 [3] =

란 아마도 필요한 것은 하나 인 > 2.800 [4] => 3.150 [5] => 2.433)

B) 정수 초로 표현 :

어레이 ([0] => 205 [1] => 267 [2] => 228 [3] => 168 [4] => 189 [5] => 145)

ere 이미 이것을하는 기존의 기능이나 PHP 정규 표현식 함수가 적절하다고 생각하기 때문에 정규 표현식을 사용해야합니다. 그러나 0 (0) 배열을 반환하는 것 같습니다. 아래 코드를 참조하십시오.

내가 SQL에서 가져 오기, 내가 만든 다음과 같은 기능을 수행합니다

public static function queryDB($aSQLQuery,&$aResult,&$aNumResult){ 
    $aResult = mysql_query($aSQLQuery); 
    $aNumResult = mysql_num_rows($aResult); 
} 

//Returns User aIDNum's 6 most recents attempts of aExcerNum 
public static function getTimes($aIDNum, $aExcerNum, &$aResult,&$aNumResult){ 
    $query = " SELECT * FROM (
        SELECT * 
        FROM Times 
        WHERE uid = ".$aIDNum."  AND 
          exid = ".$aExcerNum." 
        ORDER BY Date DESC 
        LIMIT 6 
       ) AS T1 ORDER BY Date ASC;"; 
    DBHelper::queryDB($query, $aResult, $aNumResult); 
} 

public static function processTimeData($aResult, $aNumResult, &$aArray){ 
    for($i=0; $i<$aNumResult; $i++){ 
     $row = mysql_fetch_array($aResult); 
     $aArray[$i] = DBHelper::txtP($row, 'Date'); 
    } 
    $paddingData = 6 - $aNumResult; 
    for ($j=0; $j < $paddingData; $j++){ 
     $aArray[ ($j+$aNumResult) ] = 0; 
    } 
} 

public static function txtP($aRow, $aString){ 
    return htmlspecialchars(stripslashes($aRow[$aString])); 
} 

은과 같이 사용 :

DBHelper::getTimes($userID, $excerciseID, $aResult,$aNumResult); 
DBHelper::processTimeData($aResult,$aNumResult,$timeData); 

이용할 수 있도록 시도 PHP의 IDATE() :

을 에서 83,210

결과

어레이 ([0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0)

답변

0

자신에게 솔루션을 찾았 나 생을 돕는 라그나에

감사합니다 뭔가의 nk!

processTimeData은 다음과 변경 :

public static function processTimeData($aResult, $aNumResult, &$aArray){ 
    for($i=0; $i<$aNumResult; $i++){ 
     $row = mysql_fetch_array($aResult); 
     $date = new DateTime(DBHelper::txtP($row,'Time')); 
     $aArray[$i] = intval($date->format('s')) + intval($date->format('i'))*60 + intval($date->format('G'))*3600; 
    } 
    $paddingData = 6 - $aNumResult; 
    for ($j=0; $j < $paddingData; $j++){ 
     $aArray[ ($j+$aNumResult) ] = 0; 
    } 
} 
1

글쎄, 당신은이 같은 초 변환 할 수 있습니다 :

// "00:03:25" -> 205 
Date("s",strtotime("00:03:25")) + Date("i",strtotime("00:03:25"))*60 + Date("G",strtotime("00:03:25"))*3600; 

편집 : 추가 한 strtotime()을 코드에서

+0

는 귀하의 제안에 퍼팅 즉, (("S", "0시 3분 25초") + 날짜 ("I", "0시 3분 25초 날짜 에코 ") * 60 + Date ("G ","00:03:25 ") * 3600;) yields : 61200. 쿼리의 모든 값에 대해서도 시도해 보았고 모든 쿼리에 대해 61200을 반환합니다. 또한 Date ("G", "00:03:25") * 3600은 아무것도 기여하지 않는 것 (17 * 3600) 만 나머지는 모두 0입니다. – Zigu

+0

내 실제 솔루션을 고무시키기 위해 upboated! – Zigu

+0

그래, 미안, 한 가지 중요한 부분을 잊어 버렸어. "strtotime (...)"함수. 코드를 업데이트하겠습니다. – Ragnar

관련 문제