# Anyone know how to modify this function? recip(ms(NOW,mydatefield),3.16e-11,1,1)

I'm using a mathematical function to convert dates in the past into a number that I can use as a multiplier.  Here's is an explanation:

Date Boosting

Boosting more recent content is a common use case. One way is to use a recip function in conjunction with ms.

There are approximately 3.16e10 milliseconds in a year, so one can scale dates to fractions of a year with the inverse, or 3.16e-11. Thus the function recip(ms(NOW,mydatefield),3.16e-11,1,1) will yield values near 1 for very recent documents, 1/2 for documents a year old, 1/3 for documents two years old, etc.
---------------------

I understand the gist of what it's doing, but I'd like to modify it and don't have the math chops to figure it out.

I'm basically asking how to soften the curve of this formula, as it seem to 1/2 itself every year away from the current date.  I would like the curve to roughly reduce from 1 to 0 over 10 years - e.g., drop 10% every year a date is away from today.  Anyone have any ideas?  Thanks!
pjevin

recip(diff in milliseconds,-3.16e-10,1,1) should do it.
The current function is                        1/(AGE + 1)

One function you might want is         (10 - AGE)/10
Well then why not just use max(10 - ms(NOW,mydatefield)/(1000*60*60*24*365.25), 0)/10?

If you want it to scale to 5 years, then just use 5 in place of both 10s etc.

What it does is calculate the time span in ms and divide it by the approximate number of milliseconds in a year (assuming one leap year every 4 years)
It subtracts the number of years from the target number and then divides. Anything past 10 years will be 0.
Do you want to "soften the curve" or change the curve into a straight line over 10 years?
The reason they use the recip function (1/x) is that even 200 years from now, the document that is 201 years old will have a lower boost.

Instead of 1/AGE, you could use 1/(AGE/5) (which is similar to what pjevin gave you). That will drop to 1/2 after 5 years and down to 1/3 after 10 etc.

My first post uses the (10 - AGE)/10 that d-glitch also mentioned while I was typing up my first answer. The downside to that version is that it flatlines at 0 after 10 years.

Thanks for the input thus far.  Good info.

I'm using it as a multiplier against a value called Score.  If it reduces to 0, it would 0 out my Score, so I should add 1 to it right?  Doing that would leave me with multipliers from 1 to 2, right?  That would likely have too strong of an affect, so perhaps I'll add 3 to the equation to dilute the multiplier.  Does that sound like the right way to do it?
What's wrong with the score slowly depleting toward 0 but never actually hitting 0?
TommySzalapski

membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
So the idea is
MAX_DIFF*(max(YEARS - AGE_IN_YEARS, 0)/YEARS) + MIN_SCORE

Fill those in with whatever you want. I used the following in my last post.
MAX_DIFF = .5
YEARS = 10
MIN_SCORE = 1