我正在为我的项目创建一个训练时间图表。
当前在DB中,它将钻取持续时间存储为Time字段。时间以MM:SS形式检索,因此5分30秒表示为05:30我选择的绘图包(jpgraph)需要作为数组传递给它的数值来绘图。
使用下面的代码,我得到这个:
阵列([0]=> 00:03:25 [1]=> 00:04:23 [2]=> 00: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函数似乎是合适的,但似乎只返回一个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():
public static function processTimeData($aResult, $aNumResult, &$aArray){
for( $i=0; $i<$aNumResult; $i++){
$row = mysql_fetch_array($aResult);
//Tried "i" (Minutes) and "s" (seconds)
$aArray[$i] = iDate("i",$aRow['Time']);
//$aArray[$i] = iDate("s",$aRow['Time']);
}
$paddingData = 6 - $aNumResult;
for ( $j=0; $j < $paddingData; $j++){
$aArray[ ($j+$aNumResult) ] = 0;
}
}
结果:
阵列([0]=> 0 [1]=> 0 [2]=> 0 [3]=> 0 [4][5]=> 0)=> 0
可以这样转换为秒:
// "00:03:25" -> 205
Date("s",strtotime("00:03:25")) + Date("i",strtotime("00:03:25"))*60 + Date("G",strtotime("00:03:25"))*3600;
编辑:在代码
为自己找到了一个解决方案:
谢谢Ragnar帮我想到了一些东西!
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;
}
}