注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

前端开发那点事儿

冒犯之处,敬请谅解。

 
 
 

日志

 
 
 
 

JS两个时间只差(每月按30天计算)  

2012-10-30 09:53:53|  分类: JS |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
function getProjectDuration(startDate,endDate){
    if(endDate.getTime() < startDate.getTime()){
        return 'ERROR...';
    }
    var d1 = new Date(startDate);
    var d2 = new Date(endDate);
    var m1 =d1.getMonth() + 1;
    var m2 = d2.getMonth() + 1;
    var y1 = d1.getFullYear();
    var y2 = d2.getFullYear();
    var date1 = d1.getDate();
    var date2 = d2.getDate();
    var days = 0;
    
    switch(y2 - y1){
        case 0:
            switch(m2 - m1){
                case 0:
                    days += (Math.min(date2,30) - date1 + 1);
                    break;
                default:
                    days += ((m2 - m1 - 1) * 30);
                    days += Math.max(1,(30 - date1 + 1));
                    days += Math.min(date2,30);
                    break;
            }
            break;
        default:
            days += ((y2 - y1 - 1) * 12 * 30);
            days += ((12 - m1 + m2 - 1) * 30);
            days += Math.max(1,(30 - date1 + 1));
            days += Math.min(date2,30);
            break;
    }
    return days;
}




___
计算项目提前/滞后天数/比例ratio
function getProjectDuration(startDate,endDate,warn){
    if(warn && new Date(endDate).getTime() < new Date(startDate).getTime()){
        return 'ERROR...';
    }
    var d1 = new Date(startDate);
    var d2 = new Date(endDate);
    var m1 =d1.getMonth() + 1;
    var m2 = d2.getMonth() + 1;
    var y1 = d1.getFullYear();
    var y2 = d2.getFullYear();
    var date1 = d1.getDate();
    var date2 = d2.getDate();
    var days = 0;
   
    switch(y2 - y1){
        case 0:
            switch(m2 - m1){
                case 0:
                    days += (Math.min(date2,30) - date1 + 1);
                    break;
                default:
                    days += ((m2 - m1 - 1) * 30);
                    days += Math.max(1,(30 - date1 + 1));
                    days += Math.min(date2,30);
                    break;
            }
            break;
        default:
            days += ((y2 - y1 - 1) * 12 * 30);
            days += ((12 - m1 + m2 - 1) * 30);
            days += Math.max(1,(30 - date1 + 1));
            days += Math.min(date2,30);
            break;
    }
    return days;
}

function getAhead(startDate,endDate,realEnddate){
    if(/^0000/.test(startDate)
        || /^0000/.test(endDate)
        || /^0000/.test(realEnddate)
        || !startDate || !endDate || !realEnddate){
        return false;
    }
    if(!realEnddate
        || new Date(realEnddate).getTime() < new Date(startDate).getTime()){
        return 'ERROR...';
    }
    var duration = getProjectDuration(startDate,endDate);
    var duration2 = (getProjectDuration(realEnddate,endDate) - 1);
    return ((duration2 / duration) * 100).toFixed(2).toString() + '%';
}


备注:
在火狐下 可以正常取得时间,在IE7下 却是 NaN。纠结老长时间,放弃了new date 然后再老外的论坛中找了一段段代码可以兼容所有浏览器的格式化日期代码:
JAVASCRIPT CODE普通浏览运行代码复制代码
function NewDate(str) {
var str = str.split('-');
var date = new Date();
date.setUTCFullYear(str[0], str[1] - 1, str[2]);
date.setUTCHours(0, 0, 0, 0);
return date;
}
  评论这张
 
阅读(572)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017