-
Notifications
You must be signed in to change notification settings - Fork 31
Description
Pour certains itinéraires, l'affichage suivant peut apparaître : "En voiture, le trajet de 459 km vous prendra 4 h et 60 min". Cela semble incorrect (car 60 minutes équivalent à une heure). La cause se trouve dans la fonction daysHoursMinutesFromSeconds - https://github.com/cartesapp/cartes/blob/master/app/RouteR%C3%A9sum%C3%A9.tsx#L107C14-L107C41, qui, si elle est appelée avec un nombre de secondes inférieur à une minute vers une heure (par exemple, 4 heures 59 minutes et 40 secondes), arrondit les "minutes".
Pour les très courts trajets, l'affichage suivant peut apparaître : "À pieds, le trajet de 40 m vous prendra 0 min". Cela semble également incorrect. La cause se trouve dans la même fonction.
Exemples numériques :
daysHoursMinutesFromSeconds(3600-20)
=>Array(3) [ 0, 0, 60 ]
(ex: https://cartes.app/?allez=Point+sur+la+carte%7C%7C2.4477%7C48.8275-%3ELe+Tambour%7Cw240052023%7C2.3447%7C48.8654&mode=marche#12.85/48.84649/2.37713)daysHoursMinutesFromSeconds(20)
=>Array(3) [ 0, 0, 0]
(ex: https://cartes.app/?allez=Point+sur+la+carte%7C%7C2.3448%7C48.8653-%3ELe+Tambour%7Cw240052023%7C2.3447%7C48.8654&mode=marche#20.8/48.8653793/2.3446756)
Comme la function n'est utilisé qu'à des fins de présentation, je suggère de corriger directement les cas particuliers, comme ci-dessous. D'autres solutions sont bien sûr possibles.
const daysHoursMinutesFromSeconds = (seconds) => {
/* Cette fonction est utilisée pour afficher des informations approximatif lisible par l'utilisateur. */
const secondsInDay = 24 * 60 * 60
const days = Math.floor(seconds / secondsInDay)
const rest = (seconds % secondsInDay) / (60 * 60)
const hours = Math.floor(rest)
var minutes = Math.round((rest - hours) * 60)
if (days == 0 && hours == 0 && minutes == 0) minutes = 1;
if (minutes == 60) minutes = 59;
return [days, hours, minutes]
}