js日期工具

/**
 * 日期工具类
 */
define(function(require, exports, module) {
    var constants = require("constants"); // 常量类
    
    /**
     * 描述: 把日期格式字符串转换成js Date类型
     *
     * @param dateStr: 日期字符串 格式必须为 yyyy-MM-dd hh:mm:ss 或 yyyy-MM-dd hh:mm:ss.S
     * @returns 返回JS日期对象
     */
    function getDateByStr(dateStr){
        if (!dateStr) {
            return;
        }
        //去掉后面毫秒数
        if (dateStr.indexOf(".") != -1) {
            dateStr = dateStr.substring(0, dateStr.indexOf("."));
        }
        
        // 形如20160101120101转换成2016-01-01 12:01:01
        if ($.trim(dateStr).length == 14 && dateStr.indexOf("-") == -1) {
            dateStr = dateStr.replace(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/, '$1-$2-$3 $4:$5:$6');
        }
        
        // 形如20160101转换成2016-01-01
        if ($.trim(dateStr).length == 8 && dateStr.indexOf("-") == -1) {
            dateStr = dateStr.replace(/(\d{4})(\d{2})(\d{2})/, '$1-$2-$3 00:00:00');
        }
        dateStr = dateStr.replace(new RegExp("-", "gm"), "/");
        return new Date(dateStr);
    }
    
    /**
     * 描述:把yyyy-MM-dd hh:mm:ss (.S)日期字符串转化为指定格式的日期字符串
     *
     * @author
     * @param srcDate: 1、源日期为日期格式的字符串 如:2015-11-12 11:34:45
     *                    2、源日期为Date类型 如:new Date();
     * @param fmt: 格式,如:yyyy-MM-dd
     */
    function dateFormat(srcDate, fmt){
        if (!srcDate || !fmt) {
            return srcDate;
        }
        
        // 把字符串转换成日期对象
        var date = (typeof(srcDate) == "object") ? srcDate : getDateByStr(srcDate);
        
        // 非date类型时返回原字符串
        if (isNaN(date.getDay())) {
            return srcDate;
        }
        
        var o = {
            "M+" : date.getMonth() + 1, // 月份
            "d+" : date.getDate(), //
            "h+" : date.getHours(), // 小时
            "m+" : date.getMinutes(), //
            "s+" : date.getSeconds(), //
            "q+" : Math.floor((date.getMonth() + 3) / 3), // 季度
            "S" : date.getMilliseconds() // 毫秒
        };
        
        // 年份比较特殊,单独处理
        if (/(y+)/.test(fmt)){
            fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
        }
            
        for ( var k in o){
            if (new RegExp("(" + k + ")").test(fmt)){
                fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
            }
        }
            
        return fmt;
    }

    /**
     * 描述: 获取时间毫秒数
     *
     * @author
     * @param date: 格式为yyyy-MM-dd hh:mm:ss 或 yyyy-MM-dd hh:mm:ss.S的时间字符串
     * @returns 返回时间毫秒数
     */
    function getDateTime(date){
        if (!date) {
            return 0;
        }
        //去掉后面毫秒数
        if (date.indexOf(".") != -1) {
            date = date.substring(0, date.indexOf("."));
        }
        date = date.replace(new RegExp("-", "gm"), "/");
        return (new Date(date)).getTime();
    }
    
    /**
     * 描述:根据年份和月份计算出有多少天
     * @author
     * @param year: 年份
     * @param month: 月份
     * @returns 天数
     */
    function getMonthDays(year, month){     
        var monthStartDate = new Date(year, month - 1, 1);      
        var monthEndDate = new Date(year, month, 1);      
        return (monthEndDate - monthStartDate)/(1000 * 60 * 60 * 24);      
    }
    
    /**
     * 计算某日期为一周中的哪天
     */
    function cweekday(wday)
    {
        var hzWeek= new Array("星期日","星期一","星期二","星期三","星期四","星期五","星期六","星期日");
        return hzWeek[wday];
    }

    /**
     * 获取当前时间前后N天日期的方法
     * 可以得到昨天,今天,明天,一月前,三月前,半年前,一年前的日期,
     * 只要修改参数就可以实现得到任何一个天数
     * 昨天:getDateStr(-1)
     * 今天:getDateStr(0)
     * 明天:getDateStr(1)
     * 
     * formate==>  1:yyyyMMdd
     *             2:yyyy-MM-dd
     */
    function getDateStr(addDayCount, formate){ 
        var dd = new Date(); 
        dd.setDate(dd.getDate() + addDayCount); //获取addDayCount天后的日期 
        var y = dd.getFullYear(); 
        var m = (dd.getMonth() + 1) < 10 ? "0" + (dd.getMonth() + 1) : (dd.getMonth() + 1);//获取当前月份的日期,不足10补0
        var d = dd.getDate() < 10 ? "0" + dd.getDate() : dd.getDate(); //获取当前几号,不足10补0
        if(1 == formate){
            return y + m + d; //格式:yyyyMMdd
        }else if(2 == formate){
            return y + "-" + m + "-" + d; 
        }
    }

    function cala(date)
    {
        var y = date.substring(0,4);//年份
        var m = date.substring(5,7);//月份
        var d = date.substring(8,10);//日期
        var next = 0;
        var cash_time;
        var ttt=new Date(y,m-1,d).getTime()+next * 24000 * 3600;

        var theday=new Date();
        theday.setTime(ttt);
        var weekday = cweekday(theday.getDay());
        
        return weekday;
    }

    /**
     *获取当前时间和日期
     *@param srcDate: 1、源日期为日期格式的字符串 如:2015-11-12 11:34:45
     *                   2、源日期为Date类型 如:new Date();
     */
    function getNowDate(fmt){
        var nowDate=new Date();
        if(fmt==1){
            return dateFormat(nowDate, "2015-11-12 11:34:45");
        }else{
            return dateFormat(nowDate,"yyyy-MM-dd");
        }
    }



    var dateUtils = {
        "dateFormat" : dateFormat, // 根据格式显示日期
        "getMonthDays" : getMonthDays, //根据年份和月份计算出有多少天
        "getDateTime" : getDateTime, //获取时间毫秒数
        "cala"        : cala //根据日期计算该日为一周中的某天
    };

    //暴露对外的接口
    module.exports = dateUtils;
});

 

posted on 2016-04-23 16:17  小人物的奋斗  阅读(895)  评论(0编辑  收藏  举报

导航