2011-08-17 8 views
0

私のプロジェクトのドリル時間のグラフを作成しています。PHP + MySQL:数値を文字列にした時間

現在、DBには、ドリル期間が[時間]フィールドとして格納されています。 時間はMM:SSフォームで取得されるので、5分30秒は05:30と表されます。 私が選んだグラフ作成パッケージ(jpgraph)にはグラフに配列として渡される数値が必要です。

私はこの取得下のコードを使用する:

アレイ([0] => 0時03分25秒を[1] =>午後12時04分23秒[2] =>午後12時03分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)

PHPのidate関数が適切だと思うので、これを実現するために正規表現をする必要がありますか?030の配列を返します(下記のコードを参照してください)。

私は私が作った以下の機能でそれを行う、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])); 
} 

:PHPのIDATEを(使用する

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

私の試み):

​​847412での

結果:

アレイ([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; 

EDIT:THI私を助けるためラグナーに

ありがとう:追加されましたのstrtotime()のコード

+0

は( 日( "S"、 "午後12時03分25秒" をエコーつまり、あなたの提案に置く)+日( "I"、「午後12時03分25秒")* 60 + Date(" G "、" 00:03:25 ")* 3600;)は61200を返します。クエリのすべての値についても同様に試しました。 Date( "G"、 "00:03:25")* 3600は何でも寄与しているようです(17 * 3600)。残りはすべて0です。 – Zigu

+0

私の実際のソリューションを刺激するためにupboated! – Zigu

+0

申し訳ありませんが、重要な部分を忘れました。 "strtotime(...)"関数。私はコードを更新します。 – Ragnar

関連する問題