随笔 - 5, 文章 - 0, 评论 - 20, 引用 - 0
数据加载中……

处理一些和日期有关的动作

/*
-------------------------------------------------------------------------------
文件名称:date.js
说    明:JavaScript脚本,处理一些和日期有关的动作
版    本:1.0
修改纪录:
---------------------------------------------------------------------------
时间        修改人      说明
2005-4-20   zhouming        创建
-------------------------------------------------------------------------------    
*/


/*
用途:把日期从一种格式转换为另一种格式
输入:date:日期;fmt1:原来的格式;fmt2 转换成的格式
返回:fmt2格式的日期
格式:年:yyyy   月:MM  日:dd
            时:HH   分:mm  秒:ss
*/
function dateFormat( date, fmt1,fmt2) {
    if (isFormatDate( date, fmt1)) {
       if (fmt2.indexOf("yyyy")!=-1&&fmt2.indexOf("MM")!=-1&&fmt2.indexOf("dd")!=-1){
        //设置日期
              var retDate = setDate( date, fmt1,fmt2);
     if (fmt2.indexOf("HH")!=-1&&fmt2.indexOf("mm")!=-1&&fmt2.indexOf("ss")!=-1){
        //设置时间
     retDate = setTime(date, fmt1,retDate);
       }
     return retDate;
    }
    else {
         alert("日期格式错误");
    }
    }
    else {
        alert("日期格式错误");
    }
    return "";
}

 

/*
用途:判断是否是日期
输入:date:日期;fmt:日期格式
返回:如果通过验证返回true,否则返回false
*/
function isFormatDate( date, fmt) {
    var yIndex = fmt.indexOf("yyyy");
    if(yIndex==-1) return false;
   var year = date.substring(yIndex,yIndex+4);
   var mIndex = fmt.indexOf("MM");
    if(mIndex==-1) return false;
   var month = date.substring(mIndex,mIndex+2);
   var dIndex = fmt.indexOf("dd");
    if(dIndex==-1) return false;
   var day = date.substring(dIndex,dIndex+2);
    if(!isNumber(year)||year>"2100" || year< "1900") return false;
    if(!isNumber(month)||month>"12" || month< "01") return false;
    if(day>getMaxDay(year,month) || day< "01") return false;
    return true;
}

//取得某个月的最大天数
function getMaxDay(year,month) {
    if(month==4||month==6||month==9||month==11)
        return "30";
    if(month==2)
        if(year%4==0&&year%100!=0 || year%400==0)
            return "29";
        else
            return "28";
    return "31";
}

function isNumber( str ){ 
    var regu = /^(\d+)$/;
        return regu.test(str);
}

function setDate( date, fmt1,fmt2) {
        var yIndex = fmt1.indexOf("yyyy");
        var year = date.substring(yIndex,yIndex+4);
        var mIndex = fmt1.indexOf("MM");
        var month = date.substring(mIndex,mIndex+2);
        var dIndex = fmt1.indexOf("dd");
        var day = date.substring(dIndex,dIndex+2);
        var retDate = fmt2;
        retDate = retDate.replace(/yyyy/i,year);
        retDate = retDate.replace(/MM/i,month);
        retDate = retDate.replace(/dd/i,day);
        return retDate ;
}

function setTime( date, fmt1,retDate) {
        var hour ="00";
        var min ="00";
        var sec ="00";
        var hIndex = fmt1.indexOf("HH");
        var mIndex = fmt1.indexOf("mm");
        var sIndex = fmt1.indexOf("ss");
        if(sIndex!=-1&&hIndex!=-1&&mIndex!=-1) {
   sec = date.substring(sIndex,sIndex+2);
   min = date.substring(mIndex,mIndex+2);
   hour = date.substring(hIndex,hIndex+2);
   if(!isNumber(hour)||hour>"23" || hour< "00") {alert("日期格式错误"); return ""};
   if(!isNumber(min)||min>"59" || min< "00") {alert("日期格式错误"); return ""};
   if(!isNumber(sec)||sec>"59" || sec< "00") {alert("日期格式错误"); return ""};
  }
  else if (!(sIndex==-1&&hIndex==-1&&mIndex==-1))
  {
            alert("日期格式错误");
   return "";
        }
        retDate = retDate.replace(/HH/i,hour);
        retDate = retDate.replace(/mm/i,min);
        retDate = retDate.replace(/ss/i,sec);
  return retDate;
}

posted on 2007-09-18 08:46 primeton 阅读(838) 评论(4)  编辑  收藏

评论

# re: 处理一些和日期有关的动作  回复  更多评论   

楼主JS玩得很厉害啊
2007-09-18 09:21 | 千里冰封

# re: 处理一些和日期有关的动作  回复  更多评论   

太厉害了,什么时候我才能学到这个地步啊,让炉子的火不再是黄的,让它边青!
2007-09-18 15:44 | 杨爱友

# re: 处理一些和日期有关的动作  回复  更多评论   

太不灵活了。
时间必须为yyyyMMdd,如果想格式化成yyyyMM都不行。
2007-09-19 16:42 | bean

# re: 处理一些和日期有关的动作  回复  更多评论   

怎么把Sat Now 10 15:30:00 UTC+0800 2007转换成11/5和2007-10-15两种格式?
2007-11-05 16:33 | xx

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问