Difference between dates in JavaScript

后端 未结 8 2226
渐次进展
渐次进展 2020-11-22 13:22

How to find the difference between two dates?

相关标签:
8条回答
  • 2020-11-22 14:03

    This answer, based on another one (link at end), is about the difference between two dates.
    You can see how it works because it's simple, also it includes splitting the difference into
    units of time (a function that I made) and converting to UTC to stop time zone problems.

    function date_units_diff(a, b, unit_amounts) {
        var split_to_whole_units = function (milliseconds, unit_amounts) {
            // unit_amounts = list/array of amounts of milliseconds in a
            // second, seconds in a minute, etc., for example "[1000, 60]".
            time_data = [milliseconds];
            for (i = 0; i < unit_amounts.length; i++) {
                time_data.push(parseInt(time_data[i] / unit_amounts[i]));
                time_data[i] = time_data[i] % unit_amounts[i];
            }; return time_data.reverse();
        }; if (unit_amounts == undefined) {
            unit_amounts = [1000, 60, 60, 24];
        };
        var utc_a = new Date(a.toUTCString());
        var utc_b = new Date(b.toUTCString());
        var diff = (utc_b - utc_a);
        return split_to_whole_units(diff, unit_amounts);
    }
    
    // Example of use:
    var d = date_units_diff(new Date(2010, 0, 1, 0, 0, 0, 0), new Date()).slice(0,-2);
    document.write("In difference: 0 days, 1 hours, 2 minutes.".replace(
       /0|1|2/g, function (x) {return String( d[Number(x)] );} ));

    How my code above works

    A date/time difference, as milliseconds, can be calculated using the Date object:

    var a = new Date(); // Current date now.
    var b = new Date(2010, 0, 1, 0, 0, 0, 0); // Start of 2010.
    
    var utc_a = new Date(a.toUTCString());
    var utc_b = new Date(b.toUTCString());
    var diff = (utc_b - utc_a); // The difference as milliseconds.
    

    Then to work out the number of seconds in that difference, divide it by 1000 to convert
    milliseconds to seconds, then change the result to an integer (whole number) to remove
    the milliseconds (fraction part of that decimal): var seconds = parseInt(diff/1000).
    Also, I could get longer units of time using the same process, for example:
    - (whole) minutes, dividing seconds by 60 and changing the result to an integer,
    - hours, dividing minutes by 60 and changing the result to an integer.

    I created a function for doing that process of splitting the difference into
    whole units of time, named split_to_whole_units, with this demo:

    console.log(split_to_whole_units(72000, [1000, 60]));
    // -> [1,12,0] # 1 (whole) minute, 12 seconds, 0 milliseconds.
    

    This answer is based on this other one.

    0 讨论(0)
  • 2020-11-22 14:06
        // This is for first date
        first = new Date(2010, 03, 08, 15, 30, 10); // Get the first date epoch object
        document.write((first.getTime())/1000); // get the actual epoch values
        second = new Date(2012, 03, 08, 15, 30, 10); // Get the first date epoch object
        document.write((second.getTime())/1000); // get the actual epoch values
        diff= second - first ;
        one_day_epoch = 24*60*60 ;  // calculating one epoch
        if ( diff/ one_day_epoch > 365 ) // check , is it exceei
        {
        alert( 'date is exceeding one year');
        }
    
    0 讨论(0)
提交回复
热议问题