天天看點

javascript 計算兩個日期的內插補點

代碼

Typescript版

javascript 計算兩個日期的內插補點
javascript 計算兩個日期的內插補點

/**
 * TimeSpan just like the class TimpSpan in C# ,represent the time difference
 * @class TimeSpan
 */
class TimeSpan {
    constructor(millionseconds: number) {
        this.totalMillionseconds = millionseconds;
        this.totalSeconds = millionseconds / 1000;
        this.totalMinutes = this.totalSeconds / 60;
        this.totalHours = this.totalMinutes / 60;
        this.totalDays = this.totalHours / 24;

        this.day = Math.floor(millionseconds / (1000 * 60 * 60 * 24));
        let surplus = millionseconds % (1000 * 60 * 60 * 24);
        this.hour = surplus / (1000 * 60 * 60);
        surplus = surplus % (1000 * 60 * 60);
        this.minute = surplus / (1000 * 60);
        surplus = surplus % (1000 * 60);
        this.second = surplus / (1000);
        surplus = surplus % (1000);
        this.millionsecond = surplus;

    }

    totalDays: number;
    totalHours: number;
    totalMinutes: number;
    totalSeconds: number;
    totalMillionseconds: number;


    day: number;
    hour: number;
    minute: number;
    second: number;
    millionsecond: number;

    /**
     * if the date2 later than date 1 ,it's true
     * @type {boolean}
     * @memberOf TimeSpan
     */
    isPositive: boolean;
}


/**
 * The Aqua class
 * @class Aqua
 */
class Aqua {

    /**
     * 将Date對象轉換為 UTC 時間 毫秒數
     * convert Date object to UTC time millionseconds
     * @param {Date} date
     * @returns {number}
     */
    UTC(date: Date): number {
        return Date.UTC(
            date.getUTCFullYear(),
            date.getUTCMonth(),
            date.getUTCDate(),
            date.getUTCHours(),
            date.getUTCMinutes(),
            date.getUTCSeconds()
        )
    }

    /**
     * compare to two date ,caculate the difference 
     * 對比兩個日期,計算他們的內插補點
     * @param {Date} date1
     * @param {Date} date2
     * @returns {TimeSpan}
     */
    compareDate(date1: Date, date2: Date): TimeSpan {
        let number1 = this.UTC(date1);
        let number2 = this.UTC(date2);
        let isPositive = number2 > number1;
        number1 = Math.abs(number1);
        number2 = Math.abs(number2);
        let res = new TimeSpan(Math.abs(number2 - number1));
        res.isPositive = isPositive;
        return res;
    }
}      

View Code

JavaScript版

javascript 計算兩個日期的內插補點
javascript 計算兩個日期的內插補點
/**
 * TimeSpan just like the class TimpSpan in C# ,represent the time difference
 * @class TimeSpan
 */
var TimeSpan = (function () {
    function TimeSpan(millionseconds) {
        this.totalMillionseconds = millionseconds;
        this.totalSeconds = millionseconds / 1000;
        this.totalMinutes = this.totalSeconds / 60;
        this.totalHours = this.totalMinutes / 60;
        this.totalDays = this.totalHours / 24;
        this.day = Math.floor(millionseconds / (1000 * 60 * 60 * 24));
        var surplus = millionseconds % (1000 * 60 * 60 * 24);
        this.hour = surplus / (1000 * 60 * 60);
        surplus = surplus % (1000 * 60 * 60);
        this.minute = surplus / (1000 * 60);
        surplus = surplus % (1000 * 60);
        this.second = surplus / (1000);
        surplus = surplus % (1000);
        this.millionsecond = surplus;
    }
    return TimeSpan;
}());

   /**
     * 将Date對象轉換為 UTC 時間 毫秒數
     * convert Date object to UTC time millionseconds
     * @param {Date} date
     * @returns {number}
     */
    Aqua.prototype.UTC = function (date) {
        return Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
    };



    /**
     * compare to two date ,caculate the difference
     * 對比兩個日期,計算他們的內插補點
     * @param {Date} date1
     * @param {Date} date2
     * @returns {TimeSpan}
     */
    Aqua.prototype.compareDate = function (date1, date2) {
        var number1 = this.UTC(date1);
        var number2 = this.UTC(date2);
        var isPositive = number2 > number1;
        number1 = Math.abs(number1);
        number2 = Math.abs(number2);
        var res = new TimeSpan(Math.abs(number2 - number1));
        res.isPositive = isPositive;
        return res;
    };      

原理

1.将兩個日期轉換成UTC标準時間

2.作差

3.将剩餘的內插補點毫秒計算成天小時什麼的

4.把結果放在一個類裡

歡迎通路我的GitHub

https://github.com/rocketRobin/aqua-toolbox

繼續閱讀