Soustraire 2 time

Eléphant du PHP | 50 Messages

16 juin 2009, 01:42

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

Eléphanteau du PHP | 29 Messages

16 juin 2009, 02:34

Salut, regarde du coté des fonctions implode() et explode() :wink:
$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;

ViPHP
ViPHP | 3300 Messages

16 juin 2009, 07:32

les timestamps sont beaucoup plus pratiques pour des calculs, tu devrais à mon avis changer ce type time.
Fait du php depuis que ca existe ou presque :)

Eléphanteau du PHP | 29 Messages

16 juin 2009, 07:51

Effectivement, les timestamps sont beaucoup plus simples d'utilisation. Mais je te laisse un peu chercher... Bonne journée à tous. :)

Eléphant du PHP | 50 Messages

16 juin 2009, 20:04

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

Eléphanteau du PHP | 29 Messages

16 juin 2009, 21:19

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;  

Eléphant du PHP | 50 Messages

16 juin 2009, 21:36

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 :)

ViPHP
ViPHP | 2291 Messages

16 juin 2009, 21:39

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

?>
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Eléphant du PHP | 50 Messages

16 juin 2009, 21:46

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
Modifié en dernier par remy42 le 16 juin 2009, 21:49, modifié 1 fois.

Eléphanteau du PHP | 29 Messages

16 juin 2009, 21:48

tu arrives avant de partir? :shock:

ViPHP
ViPHP | 2291 Messages

16 juin 2009, 21:51

tu arrives avant de partir? :shock:
Bin oui cherche pourquoi :wink:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 2291 Messages

16 juin 2009, 21:54

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 :wink:
<?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

?>
Modifié en dernier par dunbar le 16 juin 2009, 21:55, modifié 1 fois.
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Eléphant du PHP | 50 Messages

16 juin 2009, 22:00

Genialll ca marche

Merci beaucoup de m'avoir aider. Je m'y perd dans toute ces fontions date time etc qui existe

Merci encore

Eléphant du PHP | 50 Messages

18 juin 2009, 02:21

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

ViPHP
ViPHP | 3300 Messages

18 juin 2009, 03:02

mais ca marche pas ton histoire, il te faut des timestamps, si par exemple ton truc dure plus de 24h, ca marche plus.
Fait du php depuis que ca existe ou presque :)