1

I'm using the khanacademy.org API scratchpads to get the JSON data for users. I am trying to calculate how long they have been a member of khan academy using the date joined and the current date.

This is what they date in JSON looks like: "dateJoined": "2018-04-24T00:07:58Z",

So if data is a variable that is that JSON path, I could say var memberSince = data.dateJoined;

Is there a way I can calculate the number of years the user has been a member? In psuedo code, this is what the difference would look like: var memberTime = data.dateJoined - current datet

Thanks a lot in advance!

  • do you also count hours, minutes, seconds and milliseconds? – Mister Jojo May 14 '20 at 01:17
  • There are already [many questions on this topic](https://stackoverflow.com/search?q=%5Bjavascript%5D+difference+between+two+dates+in+years%2C+months) already. Research, write some code then ask when you have issues. – RobG May 14 '20 at 02:01
  • actually just years would be fine if I could check if the difference is less than a year and say something like: "Less than a year" – Oyster_Bucket May 14 '20 at 02:29

1 Answers1

0

Here is a constructor I made that gives days, hours, minutes, and seconds. I just did the approximate years by dividing by 365. Figuring the years out exactly would require more work, as you would have to incorporate leap year... but it's a start.

function TimePassed(milliseconds = null, decimals = null){
  this.days = this.hours = this.minutes = this.seconds = 0;
  this.update = (milliseconds, decimals = null)=>{
    let h = milliseconds/86400000, d = Math.floor(h), m = (h-d)*24;
    h = Math.floor(m);
    let s = (m-h)*60;
    m = Math.floor(s); s = (s-m)*60;
    if(decimals !== null)s = +s.toFixed(decimals);
    this.days = d; this.hours = h; this.minutes = m; this.seconds = s;
    return this;
  }
  this.nowDiffObj = date=>{
    this.update(Date.now()-date.getTime());
    let d = this.days, h = this.hours, m = this.minutes, s = this.seconds;
    if(m < 10)m = '0'+m;
    if(s < 10)s = '0'+s;
    return {date:date.toString(), nowDiff:d+' days, '+h+':'+m+':'+s}
  }
  if(milliseconds !== null)this.update(milliseconds, decimals);
}
const dt = new Date('2018-04-24T00:07:58Z'), tp = new TimePassed(Date.now()-dt.getTime());
console.log(Math.floor(tp.days/365));
StackSlave
  • 10,613
  • 2
  • 18
  • 35