Discussion:
Ajouter des =?ISO-8859-15?B?qw==?= time =?ISO-8859-15?B?uw==?
(trop ancien pour répondre)
Denis Bitouzé
2009-07-01 11:04:28 UTC
Permalink
Bonjour,

dans un formulaire, je récupère un horaire (de début d'événement) et une
durée au format :

HH:MM

et j'ai eu beau farfouiller dans des tas de sites et forums, procéder
à des tas de tests, je n'ai pas trouvé moyen d'ajouter l'un à l'autre
pour obtenir l'horaire de fin d'événement.

Merci d'avance pour tout conseil...
--
Denis
CrazyCat
2009-07-01 14:54:53 UTC
Permalink
Post by Denis Bitouzé
dans un formulaire, je récupère un horaire (de début d'événement) et une
HH:MM
Peut-être qu'avec strtotime ça peut fonctionner.
J'imagine que l'horaire de début est la date/heure de début. On peut
donc faire:
<?php
$start = strtotime($horaire);
$dur = explode(':', $duree);
$end = strtotime("+ ".intval($dur[0])." hours ".intval($dur[1])."
minutes", $start);

echo date('d/m/Y H:i', $end);
?>
--
Réseau IRC Francophone: http://www.zeolia.net
Aide et astuces : http://www.g33k-zone.org
Communauté Francophone sur les Eggdrops: http://www.eggdrop.fr
Xavier Nayrac
2009-07-01 14:54:53 UTC
Permalink
Post by Denis Bitouzé
Bonjour,
dans un formulaire, je récupère un horaire (de début d'événement) et une
HH:MM
et j'ai eu beau farfouiller dans des tas de sites et forums, procéder
à des tas de tests, je n'ai pas trouvé moyen d'ajouter l'un à l'autre
pour obtenir l'horaire de fin d'événement.
Merci d'avance pour tout conseil...
Bonjour,

Un début de solution :
Convertir tes horaires en minutes HH * 60 + MM
Ajouter les deux horaires puis faire la conversion inverse.
Une division par 60 donnera les heures et un modulo par 60
donnera les minutes.
Après, faire attention à ne pas dépasser 23:59 !
Difficile de dire mieux sans plus d'informations.
--
Xavier Nayrac
http://personalbugtracker.free.fr
Julien Marchand
2009-07-01 14:54:53 UTC
Permalink
Post by Denis Bitouzé
Bonjour,
dans un formulaire, je récupère un horaire (de début d'événement) et une
HH:MM
et j'ai eu beau farfouiller dans des tas de sites et forums, procéder
à des tas de tests, je n'ai pas trouvé moyen d'ajouter l'un à l'autre
pour obtenir l'horaire de fin d'événement.
Merci d'avance pour tout conseil...
Bonjour,

En effet en cherchant brièvement je n'ai pas trouvé de fonction native
permettant de faire ça.

Mais c'est pas très grave :

<?php
function horaire_fin($horaire_debut, $duree)
{
// $horaire_debut et $duree au format 'HH:MM'
list($heures_debut, $minutes_debut) = sscanf($horaire_debut, "%d:%d");
list($heures_duree, $minutes_duree) = sscanf($duree, "%d:%d");

$heures_fin = $heures_debut + $heures_duree + floor(($minutes_debut +
$minutes_duree)/60);
$minutes_fin = ($minutes_debut + $minutes_duree)%60;

if($heures_fin < 10) $heures_fin = "0$heures_fin";
if($minutes_fin < 10) $minutes_fin = "0$minutes_fin";

return "$heures_fin:$minutes_fin";
}

$horaire_debut = '13:45';
$duree = '02:16';

echo horaire_fin($horaire_debut, $duree);
?>

Ça devrait le faire :)

Sinon tu peux aussi utiliser les timestamp, peut être plus concis et
plus propre :

<?php
function horaire_fin2($horaire_debut, $duree)
{
// $horaire_debut et $duree au format 'HH:MM'
list($heures_debut, $minutes_debut) = sscanf($horaire_debut, "%d:%d");
list($heures_duree, $minutes_duree) = sscanf($duree, "%d:%d");

$time_debut = mktime($heures_debut, $minutes_debut);
$time_fin = $time_debut + 60*60*$heures_duree + 60*$minutes_duree;

return date('H:i', $time_fin);
}

$horaire_debut = '13:45';
$duree = '02:16';

echo horaire_fin2($horaire_debut, $duree);
?>
Anthony
2009-07-01 14:54:53 UTC
Permalink
Post by Denis Bitouzé
Bonjour,
dans un formulaire, je récupère un horaire (de début d'événement) et une
HH:MM
et j'ai eu beau farfouiller dans des tas de sites et forums, procéder
à des tas de tests, je n'ai pas trouvé moyen d'ajouter l'un à l'autre
pour obtenir l'horaire de fin d'événement.
Merci d'avance pour tout conseil...
pas trop le temps mais essayer ça pour voir ...

function AddTime($time1,$time2) {
list( $hr1, $min1, $sec1 ) = split( ":", $time1);
$UTime1 = mktime(1,$min1,$sec1,01,01,1970);
list( $hr2, $min2, $sec2 ) = split( ":", $time2);
$UTime2 = mktime(1,$min2,$sec2,01,01,1970);
$UTimeTotal = $UTime1 + $UTime2;
$UTimeTotal = $UTimeTotal - 3600;
$timeTotal = date ("H:i:s",$UTimeTotal);
list( $hr3, $min3, $sec3 ) = split( ":", $timeTotal);
$hrTotal = $hr1 + $hr2;
if ($hr3 >= 1)
$hrTotal = $hrTotal + $hr3;
if( $hrTotal<10) { $hrTotal="0".$hrTotal; }
$timeTotal = $hrTotal.":".$min3.":".$sec3;
return $timeTotal;
}

anthony
samuel
2009-07-01 14:54:53 UTC
Permalink
Post by Denis Bitouzé
Bonjour,
dans un formulaire, je récupère un horaire (de début d'événement) et une
HH:MM
et j'ai eu beau farfouiller dans des tas de sites et forums, procéder
à des tas de tests, je n'ai pas trouvé moyen d'ajouter l'un à l'autre
pour obtenir l'horaire de fin d'événement.
Merci d'avance pour tout conseil...
--
Denis
tu le récupère aussi en HH:MM ton début d'événement?
si oui, ben tu extrais les HH et les MM, tu ajoute les HH entre eux,
les MM entre eux, tu divises par 60 en gardant le reste... pis voilà
quoi
non?

après je dis pas, y'a p-e plus simple..
bonne chance
Denis Bitouzé
2009-07-01 22:53:48 UTC
Permalink
Le mercredi 01/07/09 à 11h04,
Post by Denis Bitouzé
Merci d'avance pour tout conseil...
Merci pour tous vos conseils. Entre temps, j'ai fini par trouver cette
autre solution :

$debut=$_POST["debut"]; // Au format HH:MM
$duree=$_POST["duree"]; // Au format HH:MM
$heures_debut=date("H", strtotime($debut));
$minutes_debut=date("i", strtotime($debut));
$heures_duree=date("H", strtotime($duree));
$minutes_duree=date("i", strtotime($duree));
$heures_fin=$heures_debut+$heures_duree;
$minutes_fin=$minutes_debut+$minutes_duree;
$fin=date("H:i", mktime($heures_fin, $minutes_fin));

dont je ne mesure pas la (le manque de) pertinence...

Encore merci !
--
Denis
Mickael Wolff
2009-07-01 22:53:48 UTC
Permalink
Post by Denis Bitouzé
dans un formulaire, je récupère un horaire (de début d'événement) et une
HH:MM
$duration = '12:30' ;
$start = '2009-06-01 12:00' ;

list($hours, $minutes) = explode(':', $duration) ;
$end = strftime('%c', strtotime(sprintf('+%d hours %d minutes', $hours,
$minutes) , strtotime($start))) ;
Post by Denis Bitouzé
et j'ai eu beau farfouiller dans des tas de sites et forums, procéder
à des tas de tests, je n'ai pas trouvé moyen d'ajouter l'un à l'autre
pour obtenir l'horaire de fin d'événement.
Si tu utilises une base de données, ça pourrait être une bonne idée
de l'exploitée afin d'avoir un calcul garanti.
Post by Denis Bitouzé
Merci d'avance pour tout conseil...
Une journée ne dure pas toujours 24 * 60 * 60 secondes. strtotime est
un outil qui permet de prendre en compte les changements d'heure (hiver,
été).
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

Seeking for a position <http://lupusmic.org/pro/>
Denis Bitouzé
2009-07-02 11:35:25 UTC
Permalink
Le mercredi 01/07/09 à 22h53,
Post by Mickael Wolff
$duration = '12:30' ;
$start = '2009-06-01 12:00' ;
list($hours, $minutes) = explode(':', $duration) ;
$end = strftime('%c', strtotime(sprintf('+%d hours %d minutes',
$hours, $minutes) , strtotime($start))) ;
OK, merci. Y a-t-il une raison de préférer ce type de méthode à ce que
je proposais finalement :

$debut=$_POST["debut"]; // Au format HH:MM
$duree=$_POST["duree"]; // Au format HH:MM
$heures_debut=date("H", strtotime($debut));
$minutes_debut=date("i", strtotime($debut));
$heures_duree=date("H", strtotime($duree));
$minutes_duree=date("i", strtotime($duree));
$heures_fin=$heures_debut+$heures_duree;
$minutes_fin=$minutes_debut+$minutes_duree;
$fin=date("H:i", mktime($heures_fin, $minutes_fin));
Post by Mickael Wolff
Post by Denis Bitouzé
et j'ai eu beau farfouiller dans des tas de sites et forums,
procéder à des tas de tests, je n'ai pas trouvé moyen d'ajouter
l'un à l'autre pour obtenir l'horaire de fin d'événement.
Si tu utilises une base de données, ça pourrait être une bonne
idée de l'exploitée afin d'avoir un calcul garanti.
Ah, OK. J'ai besoin d'afficher l'heure de fin dans un formulaire
intermédiaire, donc de faire le calcul en PHP mais, pour l'insertion
finale dans ma base de données, j'y songerai.
Post by Mickael Wolff
Post by Denis Bitouzé
Merci d'avance pour tout conseil...
Une journée ne dure pas toujours 24 * 60 * 60 secondes. strtotime
est un outil qui permet de prendre en compte les changements d'heure
(hiver, été).
Bon à savoir :)

Merci !
--
Denis
Loading...