Буквально ваши правила реализуются подобным 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
![af5c49df83bb430f9f7ba91b2c6bc147.png](https://habrastorage.org/files/af5/c49/df8/af5c49df83bb430f9f7ba91b2c6bc147.png)
С коэффициентом
k = 50000 * 3600
она удачно захватывает и вторую точку. Но плоха тем, что ближе к нулю зашкаливает в +бесконечность.
Наверное, для вашей задачи уместнее S-образная кривая –
сигмоида, задаваемая формулой вида y = 1 / (1 + e
-x) Примерно подобрал коэффициенты:
![ecd0f96a15224fe2ac9fb125e7305b8f.png](https://habrastorage.org/files/ecd/0f9/6a1/ecd0f96a15224fe2ac9fb125e7305b8f.png)
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