Algo ou fonction découpage du temps
Résolu/Fermé
Super_carotte
Messages postés
1419
Date d'inscription
mardi 8 janvier 2008
Statut
Membre
Dernière intervention
27 janvier 2015
-
7 janv. 2014 à 11:34
Super_carotte Messages postés 1419 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 27 janvier 2015 - 8 janv. 2014 à 12:02
Super_carotte Messages postés 1419 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 27 janvier 2015 - 8 janv. 2014 à 12:02
A voir également:
- Algo ou fonction découpage du temps
- Fonction si et - Guide
- Decoupage video - Guide
- Blocage agriculteur carte en temps réel - Guide
- Renommer plusieurs fichiers en même temps - Guide
- Fonction somme excel - Guide
5 réponses
Reivax962
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
7 janv. 2014 à 13:31
7 janv. 2014 à 13:31
Bonjour,
Plusieurs questions.
1) Est-ce que ton découpage ne concerne qu'un seul programme à la fois, ou est-ce que tu veux pouvoir récupérer en une seule requête des données découpées de plusieurs programmes ?
2) Comment peux-tu connaître l'utilisation CPU sur une tranche horaire, si tu n'as en base que l'utilisation CPU sur la durée totale d'exécution ?
Xavier
Plusieurs questions.
1) Est-ce que ton découpage ne concerne qu'un seul programme à la fois, ou est-ce que tu veux pouvoir récupérer en une seule requête des données découpées de plusieurs programmes ?
2) Comment peux-tu connaître l'utilisation CPU sur une tranche horaire, si tu n'as en base que l'utilisation CPU sur la durée totale d'exécution ?
Xavier
Super_carotte
Messages postés
1419
Date d'inscription
mardi 8 janvier 2008
Statut
Membre
Dernière intervention
27 janvier 2015
127
7 janv. 2014 à 14:13
7 janv. 2014 à 14:13
1- j'ai des dizaines de programmes et je pensai les traiter les uns apres les autres. Donc en recuperer un, le découper et enregistrer les nouvelles ligne dans une autre BDD.
Je pensai faire le découpage via du PHP, pas via une requete SQL sur une BDD.
2- En fait je sais que je perd de l'information en faisant ça mais il n'y a pas d'autre choix. Je recupere des données de plusieurs sources. Certaines m'envoient directement les infos heure par heure donc je suis bon pour l'analyse mais d'autres m'envoi une seule ligne comme indiqué dans l'exemple. Je linéarise donc cette information en utilisant le prorata temporis.
Je pensai faire le découpage via du PHP, pas via une requete SQL sur une BDD.
2- En fait je sais que je perd de l'information en faisant ça mais il n'y a pas d'autre choix. Je recupere des données de plusieurs sources. Certaines m'envoient directement les infos heure par heure donc je suis bon pour l'analyse mais d'autres m'envoi une seule ligne comme indiqué dans l'exemple. Je linéarise donc cette information en utilisant le prorata temporis.
Super_carotte
Messages postés
1419
Date d'inscription
mardi 8 janvier 2008
Statut
Membre
Dernière intervention
27 janvier 2015
127
Modifié par Super_carotte le 7/01/2014 à 17:02
Modifié par Super_carotte le 7/01/2014 à 17:02
J'ai une solution mais pas tres "belle" au niveau du code. Si quelqu'un trouve mieu, merci a lui :)
<?php
$date_start_heure = 15;
$date_start_minute = 59;
$date_start_seconde = 10;
$date_start_mois = 12;
$date_start_jour = 16;
$date_start_annee = 2013;
$date_end_heure = 21;
$date_end_minute = 12;
$date_end_seconde = 30;
$date_end_mois = 12;
$date_end_jour = 16;
$date_end_annee = 2013;
$date_start = mktime($date_start_heure, $date_start_minute, $date_start_seconde, $date_start_mois, $date_start_jour, $date_start_annee);
$date_start_heure++;
$fin_premiere_heure = mktime($date_start_heure, 00, 00, $date_start_mois, $date_start_jour, $date_start_annee);
$ecart_premiere_heure = $fin_premiere_heure - $date_start;
$date_end = mktime($date_end_heure, $date_end_minute, $date_end_seconde, $date_end_mois, $date_end_jour, $date_end_annee);
$debut_derniere_heure = mktime($date_end_heure, 00, 00, $date_end_mois, $date_end_jour, $date_end_annee);
$ecart_derniere_heure = $date_end - $debut_derniere_heure;
$date = date("d-m-Y");
$heure = date("H:i");
Print("Nous sommes le $date et il est $heure </br></br>");
echo "date_start= ".$date_start."</br>";
echo "fin_premiere_heure= ".$fin_premiere_heure."</br>";
echo "ecart_premiere_heure= ".$ecart_premiere_heure."</br>";
echo "</br></br></br>";
echo "date_end= ".$date_end."</br>";
echo "debut_derniere_heure= ".$debut_derniere_heure."</br>";
echo "ecart_derniere_heure= ".$ecart_derniere_heure."</br>";
$ecart_total = $date_end - $date_start;
echo "</br></br></br>";
echo "ecart_total= ".$ecart_total."</br>";
$ecart_total_moins_premiere_et_derniere_heure = $ecart_total - $ecart_premiere_heure - $ecart_derniere_heure;
echo "ecart_total_moins_premiere_et_derniere_heure= ".$ecart_total_moins_premiere_et_derniere_heure."</br>";
$nb_heure = $ecart_total_moins_premiere_et_derniere_heure / 3600 ;
echo "nombre d'heure= ".$nb_heure."</br>";
echo "</br></br></br>--------------------------------------</br>";
echo date("Y-m-d H:i:s", $date_start)."</br>";
if($nb_heure > 0){
$date_start += $ecart_premiere_heure;
echo date("Y-m-d H:i:s", $date_start-1)."</br></br>";
}
while($nb_heure > 0){
echo date("Y-m-d H:i:s", $date_start)."</br>";
$date_start += 3600;
echo date("Y-m-d H:i:s", $date_start-1)."</br></br>";
$nb_heure --;
}
echo date("Y-m-d H:i:s", $debut_derniere_heure)."</br>";
echo date("Y-m-d H:i:s", $date_end)."</br>";
echo "--------------------------------------</br></br></br>";
?>
Super_carotte
Messages postés
1419
Date d'inscription
mardi 8 janvier 2008
Statut
Membre
Dernière intervention
27 janvier 2015
127
7 janv. 2014 à 17:26
7 janv. 2014 à 17:26
Nouvelle solution:
$debut = '2013-12-16 15:34:55';
$fin = '2013-12-17 09:34:58';
$objDatefin = date_create($fin);
$objDate = date_create($debut);
do {
echo 'debut : ' . $objDate->format('Y-m-d H:i:s') . '<br/>';
$objDate = date_create($objDate->format('Y-m-d H') . ':59:59');
if ($objDate < $objDatefin) {
echo 'fin : ' . $objDate->format('Y-m-d H:i:s') . '<br/>';
}
else {
echo 'fin : ' . $fin . '<br/>';
break;
}
}
while ($objDate->modify('+1 seconde'));
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Super_carotte
Messages postés
1419
Date d'inscription
mardi 8 janvier 2008
Statut
Membre
Dernière intervention
27 janvier 2015
127
8 janv. 2014 à 12:02
8 janv. 2014 à 12:02
Nouvelle solution:
<?php
$debut = '2013-12-16 15:30:00';
$fin = '2013-12-16 18:30:00';
$cpu = 10800;
$objDatefin = date_create($fin);
$objDate = date_create($debut);
$tab_data = array();
$i=0;
do {
$tab_data[$i]['debut'] = $objDate->format('Y-m-d H:i:s');
// echo 'debut : ' . $objDate->format('Y-m-d H:i:s') . '<br/>';
$objDate = date_create($objDate->format('Y-m-d H') . ':59:59');
if ($objDate < $objDatefin) {
$tab_data[$i]['fin'] = $objDate->format('Y-m-d H:i:s');
// echo 'fin : ' . $objDate->format('Y-m-d H:i:s') . '<br/>';
}
else {
$tab_data[$i]['fin'] = $fin;
// echo 'fin : ' . $fin . '<br/>';
break;
}
$i++;
}
while ($objDate->modify('+1 seconde'));
//gestion du prorata
$timestamp_debut=strtotime($debut);
$timestamp_fin=strtotime($fin);
$dif_timestamp = $timestamp_fin - $timestamp_debut;
$i=0;
foreach($tab_data as $cle => $val){
$timestamp_val_debut=strtotime($val['debut']);
$timestamp_val_fin=strtotime($val['fin']);
$dif_val_timestamp = $timestamp_val_fin-$timestamp_val_debut;
if($i!=(sizeof($tab_data)-1)){
$dif_val_timestamp++;
}
$cpu_prorata = round($dif_val_timestamp*$cpu/$dif_timestamp,2);
$tab_data[$i]['cpu'] = $cpu_prorata;
$i++;
}
echo '<pre>';
print_r($tab_data);
echo '</pre>';
?>