0

I am trying to calculate the service time for some one from two different periods of time. I have been using a DateDiff script which is fine for displaying between two dates (Below):

<center>
<font face=glegoo size=4 color=#909090>
<script type="text/javascript">
var DateDiff = {

    inDays: function(d1, d2) {
        var t2 = d2.getTime();
        var t1 = d1.getTime();

        return parseInt((t2-t1)/(24*3600*1000));
    },

    inWeeks: function(d1, d2) {
        var t2 = d2.getTime();
        var t1 = d1.getTime();

        return parseInt((t2-t1)/(24*3600*1000*7));
    },

    inMonths: function(d1, d2) {
        var d1Y = d1.getFullYear();
        var d2Y = d2.getFullYear();
        var d1M = d1.getMonth();
        var d2M = d2.getMonth();

        return (d2M+12*d2Y)-(d1M+12*d1Y);
    },

    inYears: function(d1, d2) {
        return d2.getFullYear()-d1.getFullYear();
    }
}

var dString = "May, 23, 2016";

var d1 = new Date(dString);
var d2 = new Date();

document.write("Service:&nbsp;&nbsp;-&nbsp; "+DateDiff.inYears(d1, d2));
document.write("&nbsp;&nbsp;Years");

</script>
</font>
</center>

But I wan to add the service time from a previous period and then combine this together, displaying total years and months. I have tried "Doubling" the script in my own stuffed up way, but now starting to bang my head against the desk. I can't seem to figure out how to increase a year when months calculate more than 12 months. This is what I got to:

<center>
<font face=glegoo size=4 color=#909090>
<script type="text/javascript">
var DateDiff = {

    inDays: function(d1, d2, d3, d4) {
        var t2 = d2.getTime();
        var t1 = d1.getTime();
        var t4 = d4.getTime();
        var t3 = d3.getTime();

        return parseInt((t2-t1)/(24*3600*1000)+(t4-t3)/(24*3600*1000));
    },

    inWeeks: function(d1, d2, d3, d4) {
        var t2 = d2.getTime();
        var t1 = d1.getTime();
        var t4 = d4.getTime();
        var t3 = d3.getTime();

        return parseInt((t2-t1)/(24*3600*1000*7)+(t4-t3)/(24*3600*1000*7));
    },

    inMonths: function(d1, d2, d3, d4) {
        var d1Y = d1.getFullYear();
        var d2Y = d2.getFullYear();
        var d1M = d1.getMonth();
        var d2M = d2.getMonth();
        var d3Y = d3.getFullYear();
        var d4Y = d4.getFullYear();
        var d3M = d3.getMonth();
        var d4M = d4.getMonth();

        return (((d2M+12*d2Y)-(d1M+12*d1Y))+((d4M+12*d4Y)-(d3M+12*d3Y)));
    },

    inYears: function(d1, d2, d3, d4) {
        var d1Y = d1.getFullYear();
        var d2Y = d2.getFullYear();
        var d3Y = d3.getFullYear();
        var d4Y = d4.getFullYear();

        return ((d2Y-d1Y)+(d4Y-d3Y));
    }
}


var aString = "April, 24, 2010";
var bString = "May, 24, 2011";
var dString = "May, 23, 2016";


var d1 = new Date(aString);
var d2 = new Date(bString);
var d3 = new Date(dString);
var d4 = new Date();


document.write("Service:&nbsp;&nbsp;-&nbsp; "+DateDiff.inYears(d1, d2, d3, d4)  +"&nbsp; Years &nbsp;&nbsp;" +DateDiff.inMonths(d1, d2, d3, d4));
document.write("&nbsp;&nbsp;Months");

</script>
</font>
</center>

Any Help is very much gratefully received.

  • `` and `
    ` tags? `document.write`? Logic is also wrong. Start all over.
    – StackSlave Jan 03 '20 at 00:02
  • 1
    Does this answer your question? [How to calculate date difference in JavaScript?](https://stackoverflow.com/questions/7763327/how-to-calculate-date-difference-in-javascript) – Heretic Monkey Jan 03 '20 at 00:33

1 Answers1

0

It could be much simpler using this:

var difference = date2 - date1;

Have a look here: How to calculate date difference in JavaScript? The first comment will tell you how to get this in days, or other unit. Just make sure that date2 is bigger (after) date1!

BNilsou
  • 886
  • 8
  • 22
  • 1
    Please don’t answer with a link to another question’s answer. Please flag the question as a duplicate of that other question. – Heretic Monkey Jan 03 '20 at 00:33
  • Thank you. I will have a play with that as well. But if I have two different caluations for two different periods, example below, how can these be added together? 1st Jan 2018 - 1st Nov 2018 (10 months) 1st May 2015 - Present day (4years, 8months) This should display as 5years, 6months. but actually displays as 4years, 18months – Tri.Stand Jan 03 '20 at 11:09
  • `var diff = (date2 - date1) + (date4 - date3)` and then you convert this (ms) into what you anna get. – BNilsou Jan 03 '20 at 23:47