Page 1 sur 2
Soustraire 2 time
Posté : 16 juin 2009, 01:42
par remy42
Bonjour a tous
J'ai un souci pour soustraire 2 durée
Pour expliquer brievement j'ai sur ma page 2 <select> qui me propose des heures a inserer dans ma BDD
J'ai dans ma BDD des champs dans ma table avec pour caracteristiques TIME
J'ai vu qu'on etait pas obliger de lui inserer les secondes HH:MM:SS alors j'ai mis seulement 8:30 par exemple.
Quand j'insere dans ma base il rajoute 8:30:00
<select name="heure_arrivee">
<option value="8:30">8h30</option>
<option value="9:30">9H30</option>
<option value="10:15">10h15</option>
<option value="10:30">10h30</option>
</select>
<select name="heure_depart">
<option value="14:30">14h30</option>
<option value="15:15">15h15</option>
<option value="15:30">15h30</option>
<option value="16:30">16h30</option>
</select>
mes deux valeurs sont recuperer et traité dans une autre page
$heure_arrive=$_POST['heure_arrivee'];
$heure_depart=$_POST['heure_depart'];
et j'aimerai faire
$duree=$heure_depart-$heure_arrivee
exemple
8:45-8:30=00:15
Comment pourrais je faire car la j'ai la forte impression que j'essai de soustraire des caractères mais je vois pas comment faire.
Merci d'avance pour vos réponses
Posté : 16 juin 2009, 02:34
par Wolfgang
Salut, regarde du coté des fonctions implode() et explode()
$heure_depart = "8:30";
$heure_arrive = "8:45";
$heure_arrive_final = explode(":",$heure_arrive);
$heure_depart_final = explode(":",$heure_depart);
$final = array($heure_arrive_final[0]-$heure_depart_final[0],$heure_arrive_final[1]-$heure_depart_final[1]);
$duree = implode(":",$final);
echo $duree;
Posté : 16 juin 2009, 07:32
par Nagol
les timestamps sont beaucoup plus pratiques pour des calculs, tu devrais à mon avis changer ce type time.
Posté : 16 juin 2009, 07:51
par Wolfgang
Effectivement, les timestamps sont beaucoup plus simples d'utilisation. Mais je te laisse un peu chercher... Bonne journée à tous.

Posté : 16 juin 2009, 20:04
par remy42
Bonsoir
Merci tout d'abord pour vos reponse
Wolfgang j'ai tester ta mettre des explodes.
Ca marche plutot pas mal si l'heure d'arrivée est par exemple 8:30 et l'heure de depart 8:45 ca me sort 00:15
Cependant si l'heure d'arrivée est 8:30 et l'heure de départ 09:00
il fait 9-8 = 1 c'est OK

mais apres il fait 00-30 = -30 et la il me sort donc n'importe quoi en durée 00:00:01
Le time stamp j'ai essayer mais il me sort la date et je ne sais pas comment il faut faire pour mettre des valeurs de timestamp dans une liste déroulante comme j'ai fait avec mes select
Si vous pouviez m'eclaircir sur le sujet ce serrait sympa
En tout cas merci pour votre aide
Posté : 16 juin 2009, 21:19
par Wolfgang
Salut, une fois que tu as ton timestamp, tu n'as plus qu' à faire des opérations avec
date('G:i', $timestamp)
pourrait on avoir une vision un peu plus global de ton programme. Car si tu fixe une heure d'arrivée, et une heure de départ, il faut bien que la personne choisisse un jour également. non?
En attendant, j'ai constaté que tu mettais par quinzaine de minute, donc une simple condition n'est elle pas suffisante?
$heure_depart = "8:30";
$heure_arrive = "9:45";
$heure_arrive_final = explode(":",$heure_arrive);
$heure_depart_final = explode(":",$heure_depart);
if($heure_arrive_final[1]<$heure_depart_final[1])
$final = array($heure_arrive_final[0]-$heure_depart_final[0],$heure_depart_final[1]-$heure_arrive_final[1]);
else
$final = array($heure_arrive_final[0]-$heure_depart_final[0],$heure_arrive_final[1]-$heure_depart_final[1]);
$duree = implode(":",$final);
echo $duree;
Posté : 16 juin 2009, 21:36
par remy42
sur la page du formulaire j'ai
<?php
setlocale (LC_TIME, 'FR');
//$date_jour = date du jour au format DATE();
$date_jour = date("Y-m-d");
<input type="text" value="<?php echo $date_jour; ?>" name="datedujour" size="10" />
?>
Ca me fait sur ma page web un champ text avec la date du jour deja prerempli
Ensuite dans ma table j'ai un champ " num, date , heure_arrivee, heure_depart, durée, numpersonne"
Dans mon traitement je recupere la date
$datedujour=$_POST['datedujour'];
$heure_arrivee=$_POST['heure_arrivee'];
$heure_depart=$_POST['heure_depart'];
$numpersonne=$_POST['numpersonne'];
et apres je met les variables dans ma requete INSERT sql.
Je n'arrive pas a comprendre ce foutu time , timestamp , date je melange tout ca m'enerveeee

Posté : 16 juin 2009, 21:39
par dunbar
Salut,
Pourquoi pas simplement avec strtotime
Comme ceci peut-être
<?php
date_default_timezone_set("GMT");
$heure_arrive = strtotime("08:30");
$heure_depart = strtotime("08:45");
echo date('H:i',$heure_depart - $heure_arrive);//Affiche 00:15
?>
Posté : 16 juin 2009, 21:46
par remy42
Dunbar ta methode marche effectivement mais mes heure ne sont pas rentré en dur regarde mon premier message ils proviennent d'un <select> et sont recuperer dans des variable
Comment puis-je faire
Posté : 16 juin 2009, 21:48
par Wolfgang
tu arrives avant de partir?

Posté : 16 juin 2009, 21:51
par dunbar
tu arrives avant de partir?

Bin oui cherche pourquoi

Posté : 16 juin 2009, 21:54
par dunbar
Dunbar ta methode marche effectivement mais mes heure ne sont pas rentré en dur regarde mon premier message ils proviennent d'un <select> et sont recuperer dans des variable
Comment puis-je faire
Simplement
<?php
date_default_timezone_set("GMT");
$heure_arrive = strtotime($_POST['heure_arrivee']);
$heure_depart = strtotime($_POST['heure_depart']);
echo date('H:i',$heure_depart - $heure_arrive);//Affiche 00:30
?>
Posté : 16 juin 2009, 22:00
par remy42
Genialll ca marche
Merci beaucoup de m'avoir aider. Je m'y perd dans toute ces fontions date time etc qui existe
Merci encore
Posté : 18 juin 2009, 02:21
par remy42
Re bonjour
Je me suis permis de reouvrir le sujet car je rencontre un problème Grrrrr
J'ai utiliser le STRTOTIME dans une page ou cela fonctionnait très bien et la je reutiliser cette fonction dans d'autre pages et cette fois 8:45 - 8:30 = 01:15 au lieu de 00:15
J'ai remarqué qu'il me rajoute 1 heure a chaque fois
Une idée les amis ?
Merci
Posté : 18 juin 2009, 03:02
par Nagol
mais ca marche pas ton histoire, il te faut des timestamps, si par exemple ton truc dure plus de 24h, ca marche plus.