Je crée un graphique des temps de forage pour mon projet.PHP + MySQL: le temps comme une chaîne de caractères
Actuellement dans la base de données, il stocke la durée de l'exploration sous forme de champ Heure. Les temps sont récupérés sous la forme MM: SS donc 5 minutes 30 secondes sont exprimées en 05:30 Le paquetage graphique que j'ai choisi (jpgraph) nécessite des valeurs numériques qui lui sont passées sous la forme d'un tableau à graver.
En utilisant le code ci-dessous je reçois ceci:
Array ([0] => 00:03:25 [1] => 00:04:23 [2] => 00:03:48 [3 ] => 00:02:48 [4] => 00:03:09 [5] => 00:02:25)
Je devine comment 00:03:25 est stocké comme une chaîne (aucun moyen de confirmer le type dynamique?).
Ce que je dois probablement est:
A) Exprimé en Minutes décimales:
Array ([0] => 3,417 [1] => 4,383 [2] => 3,800 [3] = > 2,800 [4] => 3,150 [5] => 2,433)
B) exprimée en tant qu'entier secondes:
Array ([0] => 205 [1] => 267 [2] => 228 [3] => 168 [4] => 189 [5] => 145)
Existe-t-il des fonctionnalités existantes qui le font déjà ou dois-je regex loin pour accomplir quelque chose comme ceci puisque la fonction d'idate PHP semble appropriée mais semble seulement retourner un tableau de 0s (voir le code ci-dessous) ...
Quand Je rapportez de SQL, je le fais avec les fonctions suivantes que j'ai fait:
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]));
}
Utilisé comme ceci:
DBHelper::getTimes($userID, $excerciseID, $aResult,$aNumResult);
DBHelper::processTimeData($aResult,$aNumResult,$timeData);
Ma tentative d'utilisation IDATE() PHP:
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;
}
}
résultats dans:
Array ([0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0)
Mettre votre suggestion à savoir (echo Date ("s", "00:03:25") + Date ("i", "00:03:25 ") * 60 + Date (" G "," 00:03:25 ") * 3600;) rendements: 61200. Je l'ai essayé pour toutes les valeurs dans la requête et il renvoie 61200 pour chacun d'eux. Aussi seulement Date ("G", "00:03:25") * 3600 semble apporter quelque chose (17 * 3600) tandis que le reste sont tous les 0. – Zigu
upboated pour inspirer ma solution actuelle! – Zigu
Oui, désolé, j'ai oublié une partie importante. La fonction "strtotime (...)". Je vais mettre à jour le code. – Ragnar