Howās my math look?
let availableAtMs = new Date(item.assignments.available_at).getTime();
let msSinceAvailable = now - availableAtMs;
let msForSrsStage = srsStages[item.assignments.srs_stage].interval * 1000;
let msSinceLastReview = msSinceAvailable + msForSrsStage;
let staleness = msSinceLastReview / msForSrsStage;
Without any randomness, hereās how it sorts for my currently available reviews. It seems right on the surface because the lower SRS levels tend to show up sooner, but you can see (for example) the long overdue Apprentice 3 item showing up before a bunch of Apprentice 2 items.
0: {id: 8503, srs_stage: 1, available_at_time: "2019-03-23T20:00:00.000000Z", item: {ā¦}, staleness: 5.920093125}
1: {id: 8506, srs_stage: 1, available_at_time: "2019-03-23T20:00:00.000000Z", item: {ā¦}, staleness: 5.920093125}
2: {id: 8442, srs_stage: 3, available_at_time: "2019-03-22T10:00:00.000000Z", item: {ā¦}, staleness: 3.333929239130435}
3: {id: 436, srs_stage: 2, available_at_time: "2019-03-24T04:00:00.000000Z", item: {ā¦}, staleness: 2.4600465625}
4: {id: 8481, srs_stage: 2, available_at_time: "2019-03-24T04:00:00.000000Z", item: {ā¦}, staleness: 2.4600465625}
5: {id: 8504, srs_stage: 2, available_at_time: "2019-03-24T04:00:00.000000Z", item: {ā¦}, staleness: 2.4600465625}
6: {id: 8505, srs_stage: 2, available_at_time: "2019-03-24T04:00:00.000000Z", item: {ā¦}, staleness: 2.4600465625}
7: {id: 8507, srs_stage: 2, available_at_time: "2019-03-24T04:00:00.000000Z", item: {ā¦}, staleness: 2.4600465625}
8: {id: 8438, srs_stage: 3, available_at_time: "2019-03-23T10:00:00.000000Z", item: {ā¦}, staleness: 2.2904509782608695}
9: {id: 2371, srs_stage: 2, available_at_time: "2019-03-24T08:00:00.000000Z", item: {ā¦}, staleness: 1.9600465625}
10: {id: 7218, srs_stage: 4, available_at_time: "2019-03-22T21:00:00.000000Z", item: {ā¦}, staleness: 1.9080930319148937}
11: {id: 2400, srs_stage: 2, available_at_time: "2019-03-24T09:00:00.000000Z", item: {ā¦}, staleness: 1.8350465625}
12: {id: 2401, srs_stage: 2, available_at_time: "2019-03-24T09:00:00.000000Z", item: {ā¦}, staleness: 1.8350465625}
13: {id: 2403, srs_stage: 2, available_at_time: "2019-03-24T09:00:00.000000Z", item: {ā¦}, staleness: 1.8350465625}
14: {id: 7793, srs_stage: 4, available_at_time: "2019-03-23T01:00:00.000000Z", item: {ā¦}, staleness: 1.8229866489361701}
15: {id: 8495, srs_stage: 2, available_at_time: "2019-03-24T10:00:00.000000Z", item: {ā¦}, staleness: 1.7100465625}
16: {id: 6118, srs_stage: 4, available_at_time: "2019-03-23T19:00:00.000000Z", item: {ā¦}, staleness: 1.440007925531915}
17: {id: 8310, srs_stage: 5, available_at_time: "2019-03-22T21:00:00.000000Z", item: {ā¦}, staleness: 1.2555710928143713}
18: {id: 8208, srs_stage: 5, available_at_time: "2019-03-22T22:00:00.000000Z", item: {ā¦}, staleness: 1.2495830688622755}
19: {id: 2377, srs_stage: 5, available_at_time: "2019-03-23T17:00:00.000000Z", item: {ā¦}, staleness: 1.135810613772455}
20: {id: 7867, srs_stage: 6, available_at_time: "2019-03-22T23:00:00.000000Z", item: {ā¦}, staleness: 1.121433947761194}
21: {id: 1778, srs_stage: 5, available_at_time: "2019-03-24T00:00:00.000000Z", item: {ā¦}, staleness: 1.0938944461077844}
22: {id: 2221, srs_stage: 5, available_at_time: "2019-03-24T00:00:00.000000Z", item: {ā¦}, staleness: 1.0938944461077844}
23: {id: 8236, srs_stage: 5, available_at_time: "2019-03-24T00:00:00.000000Z", item: {ā¦}, staleness: 1.0938944461077844}
24: {id: 7043, srs_stage: 5, available_at_time: "2019-03-24T01:00:00.000000Z", item: {ā¦}, staleness: 1.0879064221556887}
25: {id: 8082, srs_stage: 5, available_at_time: "2019-03-24T01:00:00.000000Z", item: {ā¦}, staleness: 1.0879064221556887}
26: {id: 8198, srs_stage: 5, available_at_time: "2019-03-24T01:00:00.000000Z", item: {ā¦}, staleness: 1.0879064221556887}
27: {id: 8810, srs_stage: 5, available_at_time: "2019-03-24T01:00:00.000000Z", item: {ā¦}, staleness: 1.0879064221556887}
28: {id: 1245, srs_stage: 6, available_at_time: "2019-03-23T14:00:00.000000Z", item: {ā¦}, staleness: 1.076657828358209}
29: {id: 2149, srs_stage: 6, available_at_time: "2019-03-23T18:00:00.000000Z", item: {ā¦}, staleness: 1.0647175298507463}
30: {id: 6452, srs_stage: 6, available_at_time: "2019-03-23T19:00:00.000000Z", item: {ā¦}, staleness: 1.0617324552238805}
31: {id: 1711, srs_stage: 7, available_at_time: "2019-03-23T01:00:00.000000Z", item: {ā¦}, staleness: 1.0537974582753824}
32: {id: 7219, srs_stage: 6, available_at_time: "2019-03-24T02:00:00.000000Z", item: {ā¦}, staleness: 1.040836932835821}
33: {id: 7557, srs_stage: 6, available_at_time: "2019-03-24T02:00:00.000000Z", item: {ā¦}, staleness: 1.040836932835821}
34: {id: 8398, srs_stage: 6, available_at_time: "2019-03-24T02:00:00.000000Z", item: {ā¦}, staleness: 1.040836932835821}
35: {id: 1419, srs_stage: 6, available_at_time: "2019-03-24T03:00:00.000000Z", item: {ā¦}, staleness: 1.0378518582089553}
36: {id: 1593, srs_stage: 6, available_at_time: "2019-03-24T03:00:00.000000Z", item: {ā¦}, staleness: 1.0378518582089553}
37: {id: 7638, srs_stage: 6, available_at_time: "2019-03-24T03:00:00.000000Z", item: {ā¦}, staleness: 1.0378518582089553}
38: {id: 2143, srs_stage: 6, available_at_time: "2019-03-24T04:00:00.000000Z", item: {ā¦}, staleness: 1.0348667835820895}
39: {id: 2354, srs_stage: 6, available_at_time: "2019-03-24T04:00:00.000000Z", item: {ā¦}, staleness: 1.0348667835820895}
40: {id: 6069, srs_stage: 6, available_at_time: "2019-03-24T04:00:00.000000Z", item: {ā¦}, staleness: 1.0348667835820895}
41: {id: 7282, srs_stage: 6, available_at_time: "2019-03-24T04:00:00.000000Z", item: {ā¦}, staleness: 1.0348667835820895}
42: {id: 8238, srs_stage: 7, available_at_time: "2019-03-23T21:00:00.000000Z", item: {ā¦}, staleness: 1.0259810465924897}
43: {id: 8224, srs_stage: 7, available_at_time: "2019-03-24T01:00:00.000000Z", item: {ā¦}, staleness: 1.020417764255911}
44: {id: 8234, srs_stage: 7, available_at_time: "2019-03-24T01:00:00.000000Z", item: {ā¦}, staleness: 1.020417764255911}
45: {id: 6217, srs_stage: 4, available_at_time: "2019-03-24T15:00:00.000000Z", item: {ā¦}, staleness: 1.014476010638298}
46: {id: 2137, srs_stage: 8, available_at_time: "2019-03-23T08:00:00.000000Z", item: {ā¦}, staleness: 1.0110039501563042}
47: {id: 4703, srs_stage: 8, available_at_time: "2019-03-23T08:00:00.000000Z", item: {ā¦}, staleness: 1.0110039501563042}
48: {id: 7869, srs_stage: 8, available_at_time: "2019-03-23T16:00:00.000000Z", item: {ā¦}, staleness: 1.0082252075373395}
49: {id: 1314, srs_stage: 6, available_at_time: "2019-03-24T14:00:00.000000Z", item: {ā¦}, staleness: 1.005016037313433}
50: {id: 1864, srs_stage: 6, available_at_time: "2019-03-24T14:00:00.000000Z", item: {ā¦}, staleness: 1.005016037313433}
51: {id: 2055, srs_stage: 6, available_at_time: "2019-03-24T14:00:00.000000Z", item: {ā¦}, staleness: 1.005016037313433}
52: {id: 6772, srs_stage: 6, available_at_time: "2019-03-24T14:00:00.000000Z", item: {ā¦}, staleness: 1.005016037313433}
53: {id: 7064, srs_stage: 6, available_at_time: "2019-03-24T14:00:00.000000Z", item: {ā¦}, staleness: 1.005016037313433}
54: {id: 7428, srs_stage: 6, available_at_time: "2019-03-24T14:00:00.000000Z", item: {ā¦}, staleness: 1.005016037313433}
55: {id: 7807, srs_stage: 6, available_at_time: "2019-03-24T14:00:00.000000Z", item: {ā¦}, staleness: 1.005016037313433}
56: {id: 6272, srs_stage: 8, available_at_time: "2019-03-24T09:00:00.000000Z", item: {ā¦}, staleness: 1.002320379472039}
57: {id: 7905, srs_stage: 8, available_at_time: "2019-03-24T09:00:00.000000Z", item: {ā¦}, staleness: 1.002320379472039}
P.S. Itās a shame I wonāt have this script done in time to use with the current set of reviews.