您的位置:首页 > Web前端 > JavaScript

javascript时间相加相减格式化

2013-08-02 18:25 489 查看
//调用 date1-date2
var mytime = dateDiff('2011-12-29 10:20:56', '2011-12-30 14:13:25');

/**
 * 时间相减
 * @param {type} date1  Y-m-d H:i:s格式的时间
 * @param {type} date2  Y-m-d H:i:s格式的时间
 * @returns 反回两个时间相差的秒数
 */
function dateDiff(date1, date2) {
    var getTime1 = stringToTime(date1, 'getTime');
    var getTime2 = stringToTime(date2, 'getTime');
    var lstSec = Math.abs(getTime1 - getTime2) / 1000;
    var showtime = formatSeconds(lstSec);
    return showtime;//结果是秒
}

//格式化秒数为时分秒
function formatSeconds(seconds) {
    if (seconds > 0) {
        var minutes = Math.floor(seconds / 60);
        seconds = seconds - minutes * 60;
        return formatMinutes(minutes) + (seconds > 0 ? seconds + "秒" : "");
    }
    return seconds;
}

//格式化分钟为时分 
function formatMinutes(minutes) {
    var day = parseInt(Math.floor(minutes / 1440));
    var hour = day > 0 ? Math.floor((minutes - day * 1440) / 60) : Math.floor(minutes / 60);
    var minute = hour > 0 ? Math.floor(minutes - day * 1440 - hour * 60) : minutes;
    var time = "";
    if (day > 0)
        time += day + "天";
    if (hour > 0)
        time += hour + "小时";
    if (minute > 0)
        time += minute + "分钟";
    return time;
}


/**
 * 格式化一个本地时间/日期(访php date函数)
 * @param format 时间格式
 * @param timestamp 毫秒时间戳
 * return 格式化后的时间
 */
function date_format(format, timestamp) {
    format = (format) ? format : 'y-m-d H:i:s';
    if (timestamp) {
        var date = new Date(timestamp);
    } else {
        var date = new Date();
    }
    var y = date.getFullYear();
    var m = date.getMonth() + 1;
    var d = date.getDate();
    var h = date.getHours();
    var i = date.getMinutes();
    var s = date.getSeconds();
    var w = date.getDay();
    m = m < 10 ? '0' + m : m;
    d = d < 10 ? '0' + d : d;
    h = h < 10 ? '0' + h : h;
    i = i < 10 ? '0' + i : i;
    s = s < 10 ? '0' + s : s;

    format = format.replace(/y/i, y);//年
    format = format.replace(/m/i, m);//月
    format = format.replace(/d/i, d);//天
    format = format.replace(/h/i, h);//时
    format = format.replace(/i/i, i);//分
    format = format.replace(/s/i, s);//秒
    format = format.replace(/w/i, w);//星期几
    return format;
}

/**
 * 传入参数标准时间格式反回毫秒时间戳 参数为空直接反回当前毫秒时间戳
 * @param {type} datetime 如:
 * 2015-08-06 15:16:17 
 * 2015-08-06 15:16:17.456
 * @returns 毫秒时间戳
 */
function millisecond(datetime) {
    if (!datetime) {
        return new Date().getTime();
    }
    var time_arr = [];
    time_arr = datetime.match(/^(\d+).(\d+).(\d+).(\d+).(\d+).(\d+)$/);
    if (time_arr) {
        time_arr[7] = 0;
    } else {
        time_arr = datetime.match(/^(\d+).(\d+).(\d+).(\d+).(\d+).(\d+)\.(\d+)$/);
    }
    return new Date(time_arr[1], time_arr[2], time_arr[3], time_arr[4], time_arr[5], time_arr[6], time_arr[7]).getTime();
}


/**
 * 将标准时间格式(Y-m-d H:i:s)进行转换
 * 将标准时间转换为毫秒时间戳
 * @param string 时间(Y-m-d H:i:s)
 * @param timeType 
 * timeType = getTime 反回string时间的毫秒时间戳 
 * timeType = getFullYear 反回string时间的年数字段
 * timeType = getMonth 反回string时间的月数字段
 * timeType = getDate 反回string时间的天数字段
 * timeType = getHours 反回string时间的的小时字段 
 * timeType = getMinutes 反回string时间的的分钟字段 
 * timeType = getSeconds 反回string时间的秒字段
 * @returns {Number|Date|stringToTime.mydate}
 */
function stringToTime(string, timeType) {
    var f = string.split(' ', 2);
    var d = (f[0] ? f[0] : '').split('-', 3);
    var t = (f[1] ? f[1] : '').split(':', 3);
    var mydate = (new Date(
            parseInt(d[0], 10) || null,
            (parseInt(d[1], 10) || 1) - 1,
            parseInt(d[2], 10) || null,
            parseInt(t[0], 10) || null,
            parseInt(t[1], 10) || null,
            parseInt(t[2], 10) || null
            ));
    if (timeType == "getTime") {
        return mydate.getTime();
    } else if (timeType == "getFullYear") {
        return mydate.getFullYear();
    } else if (timeType == "getMonth") {
        return mydate.getMonth();
    } else if (timeType == "getDate") {
        return mydate.getDate();
    } else if (timeType == "getHours") {
        return mydate.getHours();
    } else if (timeType == "getMinutes") {
        return mydate.getMinutes();
    } else if (timeType == "getSeconds") {
        return mydate.getSeconds();
    } else {
        return mydate;
    }
}


/**
 * 时间相减 反回 时:分:秒 格式
 * @param data1 时间 y-m-d H;i:s格式
 * @param data2 时间 y-m-d H;i:s格式
 * @returns 时:分:秒
 */
function dateDiffHIS(date1, date2) {
    //获取两个时间的毫秒时间戳
    var time1 = stringToTime(date1, 'getTime');
    var time2 = stringToTime(date2, 'getTime');

    //两个时间相差的秒数
    var s = Math.abs(time1 - time2) / 1000;
    return HIS(s);
}


/**
 * 将时间秒数转为 时:分:秒格式
 * @param s 时长秒数
 * @returns 时:分:秒
 */
function HIS(s) {
    var ss = s % 60;
    var ii = Math.floor(s / 60 % 60);
    var hh = Math.floor(s / 3600);
    var ss = str_repeat('0', (2 - String(ss).length)) + String(ss);
    var ii = str_repeat('0', (2 - String(ii).length)) + String(ii);
    var hh = str_repeat('0', (2 - String(hh).length)) + String(hh);
    return hh + ':' + ii + ':' + ss;
}


/**
 * 重复一个字符串
 * @param {type} str 要重复的字符串
 * @param {type} n 重复次数
 * @returns {String}
 */
function str_repeat(str, n) {
    var ren = '';
    for (var i = 0; i < n; i++) {
        ren += str;
    }
    return ren;
}


/**
*获取当前月份有几天 年月
*/
function getMonthDay(y,m){
	var m_day =  [31,28,31,30,31,30,31,31,30,31,30,31];
	if(y%4==0 && y%400!=0){
		m_day[1] = 29;
	}
	return m_day[m-1];
}


/**
*时间相加 y-m-d H:i:s 年月日时分秒
*反回 年月日时分秒 数组
*/
function timeAdd(dv,add_y,add_m,add_d,add_h,add_i,add_s){
	var dv2 = dv.split(/[-\s:]/);
	dv2[0]=parseInt(dv2[0])+add_y;
	dv2[1]=parseInt(dv2[1])+add_m;
	dv2[2]=parseInt(dv2[2])+add_d;
	dv2[3]=parseInt(dv2[3])+add_h;
	dv2[4]=parseInt(dv2[4])+add_i;
	dv2[5]=parseInt(dv2[5])+add_s;
	var date=new Date(dv2[0],dv2[1]-1,dv2[2],dv2[3],dv2[4],dv2[5]);
	var y = date.getFullYear();
	var m = date.getMonth()+1;
	var d = date.getDate();
	var h = date.getHours();
	var i = date.getMinutes();
	var s = date.getSeconds();	
	return [y,m,d,h,i,s];
}
var date = timeAdd('2014-05-29 18:09:00',0,0,0,20,0,0);
var prentdate = date[0]+'-'+date[1]+'-'+date[2]+' '+date[3]+':'+date[4]+':'+date[5];
alert(prentdate);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: