﻿DateTimeUtility = function () {}

DateTimeUtility.isLeapYear = function (dt) {
    ///	<summary>
    ///	闰年判断
    ///	</summary>
    ///	<param name="dt" type="Date"></param>
    ///	<returns type="boolean">true:闰年,False:非闰年</returns>
    if (!dt) return null;

    return (0 == dt.getYear() % 4 && ((dt.getYear() % 100 != 0) || (dt.getYear() % 400 == 0)));
}

DateTimeUtility.convertStandardDate2LocalTime = function (dts) {
    ///	<summary>
    ///	标准格式日期字符串("yyyyMMdd")转换成时间对象
    ///	</summary>
    ///	<param name="dts" type="string">日期字符串</param>
    ///	<returns type="Date"></returns>
    if (!dts || typeof dts !== "string" || dts.length != 8) return null;

    return convertStandardDateTime2LocalTime(dts + "000000", false);
}

DateTimeUtility.convertStandardDateTime2LocalTime = function (dts, isUtc) {
    ///	<summary>
    ///	标准格式时间字符串("yyyyMMddHHmmss")转换成时间对象
    ///	</summary>
    ///	<param name="dts" type="string">时间字符串</param>
    /// <param name="isUtc" type="boolean">dts是否是UTC时间</param>
    ///	<returns type="Date"></returns>
    if (!dts || typeof dts !== "string" || dts.length != 14) return null;

    var dt = new Date();
    if (isUtc) dt.setTime(Date.UTC(dts.substr(0, 4), dts.substr(4, 2) - 1, dts.substr(6, 2), dts.substr(8, 2), dts.substr(10, 2), dts.substr(12, 2)));
    else {
        dt.setFullYear(dts.substr(0, 4));
        dt.setMonth(dts.substr(4, 2) - 1);
        dt.setDate(dts.substr(6, 2));
        dt.setHours(dts.substr(8, 2));
        dt.setMinutes(dts.substr(10, 2));
        dt.setSeconds(dts.substr(12, 2));
    }
    return dt;
}

DateTimeUtility.getShortTimeString2 = function (time, isUtc) {
    return DateTimeUtility.getShortTimeString(DateTimeUtility.convertStandardDateTime2LocalTime(time, isUtc));
}

DateTimeUtility.getShortTimeString = function (time) {
    ///	<summary>
    ///	
    ///	</summary>
    ///	<param name="time" type="Date">时间</param>
    ///	<returns type="String">昨天 14:21    10天前 14:21</returns>
    var now = new Date();
    var ms = (now).getTime() - time.getTime();
    if (ms <= 0) return '';

    var difference = Date.UTC(now.getYear(), now.getMonth(), now.getDate(), 0, 0, 0) - Date.UTC(time.getYear(), time.getMonth(), time.getDate(), 0, 0, 0);

    days = difference / 86400000;
    if (days == 0) timeTip = "今天";
    else if (days == 1) timeTip = "昨天";
    else if (days == 2) timeTip = "前天";
    else timeTip = days + "天前";

    timeTip += " " + DateTimeUtility.PadTime(time.getHours()) + ":" + DateTimeUtility.PadTime(time.getMinutes());

    return timeTip;
}

DateTimeUtility.getTimeString = function (time) {
    ///	<summary>
    ///	
    ///	</summary>
    ///	<param name="time" type="Date">时间</param>
    ///	<returns type="String">昨天 14:21:21    10天前 14:21:31</returns>

    var str = DateTimeUtility.getShortTimeString(time);
    if (time == '') return '';
    else return (str + DateTimeUtility.PadTime(time.getSeconds()));
}

DateTimeUtility.getAgeString = function (time) {
    ///	<summary>
    ///	岁数
    ///	</summary>
    ///	<param name="time" type="Date">时间</param>
    ///	<returns type="String">1岁11月</returns>
    var now = new Date();
    var ms = now.getTime() - time.getTime();
    if (ms <= 0) return '';

    year = now.getFullYear() - time.getFullYear();
    month = now.getMonth() - time.getMonth();
    if (month < 0) {
        year = year - 1;
        month = month + 12;
    }

    var ageTip = "";
    if (year > 0) {
        ageTip = year + "岁";
    }
    if (month > 0) {
        ageTip += month + "月";
    }

    if (ageTip == "")
        ageTip = "刚出生";
    
    return ageTip;
}

DateTimeUtility.getShortDateString = function (time) {
    ///	<summary>
    ///	
    ///	</summary>
    ///	<param name="time" type="Date">时间</param>
    ///	<returns type="String">xxxx-xx-xx</returns>

    var timeTip = time.getFullYear() + "-" + DateTimeUtility.PadTime(time.getMonth() + 1) + "-" + DateTimeUtility.PadTime(time.getDate()) + "";

    return timeTip;
}

DateTimeUtility.getFullTimeSpanString = function (endTime, beginTime) {
    ///	<summary>
    ///	获取差额时间的提示字符串
    ///	</summary>
    ///	<param name="endTime" type="Date">结束时间</param>
    ///	<param name="beginTime" type="Date">开始时间</param>
    ///	<returns type="String">(endTime-beginTime)的差额时间：3小时前，2分20秒前，32秒前</returns>
    if (!endTime || !beginTime) return null;

    var ms = endTime.getTime() - beginTime.getTime();
    if (ms <= 0) return '';

    hours = ms / 3600000;
    if (hours >= 1) {
        return (Math.floor(hours) + "小时前");
    }
    else {
        minutes = ms / 60000;
        if (minutes > 0) {
            timeTip += Math.floor(minutes) + "分";
            ms = ms % (1000 * 60);
        }
        seconds = ms / 1000;
        if (seconds > 0) {
            timeTip += Math.floor(seconds) + "秒";
        }
        timeTip += "前";
        return timeTip;
    }
}

DateTimeUtility.getTimeSpanString = function (endTime, beginTime) {
    ///	<summary>
    ///	获取差额时间大概的提示字符串
    ///	</summary>
    ///	<param name="endTime" type="Date">结束时间</param>
    ///	<param name="beginTime" type="Date">开始时间</param>
    ///	<returns type="String">(endTime-beginTime)的差额时间：3小时前，2分钟前，32秒前</returns>
    if (!endTime || !beginTime) return null;

    var ms = endTime.getTime() - beginTime.getTime();
    if (ms <= 0) return '';

    hours = ms / 3600000;
    if (hours >= 1) {
        return (Math.floor(hours) + "小时前");
    }
    minutes = ms / 60000;
    if (minutes >= 1) {
        return (Math.floor(minutes) + "分钟前");
    }
    seconds = ms / 1000;
    return (Math.floor(seconds) + "秒前");
}



DateTimeUtility.PadTime = function (i) {
    ///	<summary>
    ///	内部函数，补足两位
    ///	</summary>
    ///	<param name="i" type="String">时间整数</param>
    ///	<returns type="String"></returns>
    if (i < 10) {
        i = "0" + i
    }
    return i
}

DateTimeUtility.GetTciksFromTime = function (dt) {
    ///	<summary>
    ///	同c#，获取ticks
    ///	</summary>
    ///	<param name="dt" type="Date">本地时间</param>
    ///	<returns type="long">c#时间ticks</returns>
    var lLeft = 621355968000000000;
    var jsticks = dt.getTime() - dt.getTimezoneOffset() * 60 * 1000;
    return jsticks*10000 + lLeft;
}

DateTimeUtility.GetTimeFromTciks = function (ts) {
    ///	<summary>
    ///	根据c#的ticks时间获取本地时间
    ///	</summary>
    ///	<returns type="long">c#时间ticks</returns>
    ///	<param name="dt" type="Date">本地时间</param>
    var lLeft = 621355968000000000;
    var dt = new Date();
    var localticks = ts + dt.getTimezoneOffset() * 60 * 1000 * 10000;
    var localdt = new Date((localticks - 621355968000000000) / 10000);
    return localdt;
}

DateTimeUtility.getTimeSpanToSeconds = function (ticks1, ticks2) {
    ///<summary>
    ///	根据2个c#的ticks值，返回秒差异，ticks1-ticks2
    ///	</summary>
    ///	<param name="ticks1" type="long"></param>
    ///	<param name="ticks2" type="long"></param>
    ///	<returns type="int">秒</returns>
    return Math.round((ticks1 - ticks2) / 10000000);
}

DateTimeUtility.getLongDateString = function (time) {
    ///	<summary>
    ///	
    ///	</summary>
    ///	<param name="time" type="Date">时间</param>
    ///	<returns type="String">xxxx-xx-xx</returns>

    var timeTip = time.getFullYear() + "-" + DateTimeUtility.PadTime(time.getMonth() + 1) + "-" + DateTimeUtility.PadTime(time.getDate()) + " " + DateTimeUtility.PadTime(time.getHours()) + ":" + DateTimeUtility.PadTime(time.getMinutes()) + ":" + DateTimeUtility.PadTime(time.getSeconds());

    return timeTip;
}
