Je suppose que vous vous retrouvez finalement avec une liste de messages qui ont deux dimensions de classement discrètes, c'est-à-dire :
{ age: 86400, distance: 1000 }
{ age: 172800, distance: 5000 }
{ age: 57600, distance: 20000 }
{ age: 288000, distance: 8000 }
Peu importe les unités, disons les secondes et les mètres. Si vous voulez que les deux affectent le classement de tri, vous vous retrouvez avec un algorithme de classement, dans sa forme la plus simple quelque chose comme ceci :
rank = (C1 * age) + (C2 * distance)
Où C1 et C2 sont des constantes que vous pouvez modifier pour ajuster les pondérations. Les valeurs dépendent des unités que vous utilisez et de l'influence du classement que vous attribuez à chaque dimension.
Une autre option pourrait être de classer d'abord par agrégat de temps puis par distance, de sorte que tous les messages d'aujourd'hui soient classés par distance ; suivi de celui d'hier classé par distance, et ainsi de suite. Ou vice-versa, en classant par plage de distance, puis âge, donc tout dans (0 - 1000m) classé par âge ; suivi de tous à l'intérieur (1001 - 2000m), et ainsi de suite.