8722 sujets

Développement web côté serveur, CMS

Salut,

Je me retrouve a calculer des retards nocturnes sur des trajets routiers et je découvre que... c'est la merde.

En effet, calculer un retard entre 22h et 23h ca ne me pose pas de problème. Mais quand le trajet démarre à 00h10 au lieu de 23h10... Ca fou le boxon (était donné que 0h est inférieur à 23h même en strtotime).

Bien sur les données que j'ai a mon service sont en time uniquement.

Je cherche donc des pistes pour me sortir de ce pétrin.

Merci d'avance Smiley smile
Modifié par ffwrude (30 Oct 2014 - 12:35)
Bonjour,
les retards, ça fout toujours le boxon.

Peut-être résoudrais-tu ton problème en travaillant sur des dates et non sur des heures uniquement.

Parce que, par exemple le 24/10/2014 à 0h est toujours supérieur au 23/10/2014 à 23h.
Je n'ai malheureusement pas la possibilitée de fonctionner avec des timestamp (donc des dates).... Et a mon grand regret.

Merci de ta réponse.

Du coup je continue a chercher....
Modifié par ffwrude (30 Oct 2014 - 12:51)
Modérateur
Bonjour,

Tu peux avoir des avances aussi ? Parce-que sinon dès que tu détectes que H+n < H tu découpe en deux de H à 23h59 et de 00h à H+n...
Salut Laurent,

Je peux effectivement avoir des avances Smiley decu

J'ai pour l'instant une méthode temporaire qui consiste à dire que la journée n'est pas de minuit à minuit mais de 8h à 8H.

Mais j'aimerais voir si y'a moyen de trouver un truc plus propre.
Modérateur
Arf mince..
8h ça ne fait que déplacer le problème du coup... sauf si t'es sur de ne pas avoir de départ dans ces heures là !

Sinon, si H+n < H c'est que soit tu as un retard à cheval sur minuit, soit une avance. Il te suffit de tester un cas du genre si il y a plus de 8h entre les deux (de H à H+n) c'est que ca peut pas etre une avance de 8h donc c'est que c'est a cheval sur minuit... no ?
Je suis "plutot sur" en fait. C'est pour ca que je préfererai trouver une alternative.


if($retard <= strtotime('08:00:00') && $theorique >= strtotime('08:00:00')){
	//Arrivée à 00:10. Prévue à 23:45. donc => -25minutes retard.
	$calcul = "-".gmdate("H:i:s",$retard-$theorique);
}else if($theorique >= strtotime('08:00:00') && $retard >= strtotime('08:00:00') && $retard>=$theorique){
	//Arrivée à 23:40. Prévue à 23:45 donc => -05minutes retard.
	$calcul = "-".gmdate("H:i:s",$retard-$theorique);
}else if($theorique <= strtotime('08:00:00') && $retard <= strtotime('08:00:00') && $retard>=$theorique){
	//Arrivée à 00:10. Prévue a 00:20 donc => +10minutes retard.
	$calcul = "-".gmdate("H:i:s",$retard-$theorique);
}else{
	//Arrivée à 23:50. Prévue à 00:20 donc => +30minutes avance.
	$calcul = "+".gmdate("H:i:s",$theorique-$retard);
}

En gros j'ai fai ca. (les variables sont déjà en strtotime).

Je vois pas trop ce que tu veux dire par H+n < H Tu peux me donner un exemple chiffré ?
Modifié par ffwrude (30 Oct 2014 - 17:01)
Modérateur
un truc du genre :


if($retard == $theorique){
	// pile à l'heure
}else if($retard < $theorique){
	// soit c'est une avance soit c'est un retard après minuit
	if ($retard - $theorique > strtotime('12:00:00')) {
		// Si la diff est supérieure à 12h c'est que c'est un retard après minuit ou une avance de plus de 12h
		// Prévu a 23h arrivé à 01h dif = 22h > 12h = retard apres minuit
	}else{
		// si la diff est inférieur c'est que c'est une avance de max 12h
		// Prévu a 23h arrivé à 22h dif = 1h < 12h = avance
	}
}else{
	// soit c'est un retard soit c'est une avance avant minuit
	if ($retard - $theorique > strtotime('12:00:00')) {
		// Si la diff est supérieure à 12h c'est que c'est une avance avant minuit
		// Prévu a 01h arrivé à 23h dif = 22h > 12h = avance avant minuit
	}else{
		// si la diff est inférieur c'est que c'est un retard
		// Prévu a 01h arrivé à 02h dif = 1h < 12h = retard
	}
}


Mais pour les soustractions de date je sais pas si un simple - fonctionne j'ai pas pu tester