Буквально ваши правила реализуются подобным JavaScript кодом – с условиями:
function getPostScore(time) {
var diff = Math.floor((new Date()).getTime()/1000) - time;
if( diff <= 3600) return 50000;
else if( diff <= 7200) return 25000;
else if( diff <= 10800) return 10000;
else return 0;
}
getPostScore(1493487180); // 10000
Но ступенчатость значений, наверное, не вполне оправдана и лучше будет какой-то
гладкой функцией. Например, вида
y = k / x
С коэффициентом
k = 50000 * 3600
она удачно захватывает и вторую точку. Но плоха тем, что ближе к нулю зашкаливает в +бесконечность.
Наверное, для вашей задачи уместнее S-образная кривая –
сигмоида, задаваемая формулой вида y = 1 / (1 + e
-x) Примерно подобрал коэффициенты:
function getPostSigma(time){
var diff = Math.floor((new Date()).getTime()/1000) - time;
return Math.round( 10000 + 40000 / (1 + Math.exp((diff-6800)/700)));
}
getPostSigma(1493531780); // 49998
getPostSigma(1493522780); // 11545