zoukankan      html  css  js  c++  java
  • Javascript对日期的操作

    javascript对日期处理的常用方法类

    <script language="JavaScript">
    <!--
    //程序:常用公历日期处理程序
     /**//*用相对不规则的字符串来创建日期对象,不规则的含义为:顺序包含年月日三个数值串,有间隔*/
    String.prototype.parseDate 
    = function(){
        
    var ar = (this + ",0,0,0").match(/\d+/g);
        
    return ar[5]?(new Date(ar[0],ar[1]-1,ar[2],ar[3],ar[4],ar[5])):(new Date());
    }

    /**//*
     * 功能:根据输入表达式返回日期字符串
     * 参数:dateFmt:字符串,由以下结构组成    
     *      yy:长写年,YY:短写年mm:数字月,MM:英文月,dd:日,hh:时,
     *      mi:分,ss秒,ms:毫秒,we:汉字星期,WE:英文星期.
     *      isFmtWithZero : 是否用0进行格式化,true or false
     * 返回:对应日期的中文字符串
    */
    Date.prototype.toString 
    = function(dateFmt,isFmtWithZero){
        dateFmt 
    = (dateFmt == null ? "yy-mm-dd hh:mi:ss" : dateFmt);
        
    if(typeof(dateFmt) != "string" )
            
    throw (new Error(-1'toString()方法的第一个参数为字符串类型!'));
        isFmtWithZero 
    = !!isFmtWithZero;
        
    var weekArr=[["","","","","","",""],["SUN","MON","TUR","WED","THU","FRI","SAT"]];
        
    var monthArr=["JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"];
        
    var str=dateFmt;
        
    var o = {
            
    "yy" : this.getFullYear(),
            
    "YY" : this.getYear(),
            
    "mm" : this.getMonth()+1,
            
    "MM" : monthArr[this.getMonth()],
            
    "dd" : this.getDate(),
            
    "hh" : this.getHours(),
            
    "mi" : this.getMinutes(),
            
    "ss" : this.getSeconds(),
            
    "we" : "星期" + weekArr[0][this.getDay()],
            
    "WE" : weekArr[1][this.getDay()]
        }
        
    for(var i in o){
            str 
    = str.replace(new RegExp(i,"g"),o[i].toString().fmtWithZero(isFmtWithZero));
        }
        str 
    = str.replace(/ms/g,this.getMilliseconds().toString().fmtWithZeroD(isFmtWithZero));
        
    return str;
    }
    /**//*将一位数字格式化成两位,如: 9 to 09*/
    String.prototype.fmtWithZero 
    = function(isFmtWithZero){    
        
    return (isFmtWithZero && /^\d$/.test(this))?"0"+this:this;
    }
    String.prototype.fmtWithZeroD 
    = function(isFmtWithZero){    
        
    return (isFmtWithZero && /^\d{2}$/.test(this))?"00"+this:((isFmtWithZero && /^\d$/.test(this))?"0"+this:this);
    }

    /**//* 功能 : 返回与某日期相距N天(N个24小时)的日期
     * 参数 : num number类型 可以为正负整数或者浮点数,默认为1;
     *        type 0(秒) or 1(天),默认为天
     * 返回 : 新的Date对象
     
    */
    Date.prototype.dateAfter
    =function(num,type){
        num 
    = (num == null?1:num);
        
    if(typeof(num)!="number"throw new Error(-1,"dateAfterDays(num,type)的num参数为数值类型.");
        type 
    = (type==null?1:type);
        
    var arr = [1000,86400000];
        
    return new Date(this.valueOf() + num*arr[type]);
    }

    //判断是否是闰年,返回true 或者 false
    Date.prototype.isLeapYear = function (){
        
    var year = this.getFullYear();
        
    return (0==year%4 && ((year % 100 != 0)||(year % 400 == 0)));
    }

    //返回该月天数
    Date.prototype.getDaysOfMonth = function (){
        
    return (new Date(this.getFullYear(),this.getMonth()+1,0)).getDate();
    }

    //日期比较函数,参数date:为Date类型,如this日期晚于参数:1,相等:0 早于: -1
    Date.prototype.dateCompare = function(date){
        
    if(typeof(date) != "object" || !(/Date/.test(date.constructor)))
             
    throw new Error(-1,"dateCompare(date)的date参数为Date类型.");
        
    var d = this.getTime() - date.getTime();
        
    return d>0?1:(d==0?0:-1);
    }

    /**//*功能:返回两日期之差
     *参数:pd   PowerDate对象
     *    type: 返回类别标识.yy:年,mm:月,ww:周,dd:日,hh:小时,mi:分,ss:秒,ms:毫秒
     *    intOrFloat :返回整型还是浮点型值 0:整型,不等于0:浮点型
     *    output : 输出提示,如:时间差为#周!
     
    */
    Date.prototype.calDateDistance 
    = function (date,type,intOrFloat,output){
        
    if(typeof(date) != "object" || !(/Date/.test(date.constructor)))
             
    throw new Error(-1,"calDateDistance(date,type,intOrFloat)的date参数为Date类型.");
        type 
    = (type==null?'dd':type);
        
    if(!((new RegExp(type+",","g")).test("yy,mm,ww,dd,hh,mi,ss,ms,")))
             
    throw new Error(-1,"calDateDistance(pd,type,intOrFloat,output)的type参数为非法.");
        
    var iof = (intOrFloat==null?0:intOrFloat);
        
    var num=0;
        
    var o = {
            
    "ww" : 7*86400000,
            
    "dd" : 86400000,
            
    "hh" : 3600000,
            
    "mi" : 60000,
            
    "ss" : 1000,
            
    "ms" : 1
        }
        
    switch(type){
            
    case "yy": num = this.getFullYear() - date.getFullYear(); break;
            
    case "mm": num = (this.getFullYear() - date.getFullYear())*12+this.getMonth()-date.getMonth(); break;
            
    default
                
    var sub = this.valueOf() - date.valueOf();
                
    if (o[type])
                    num 
    = (sub/o[type]).fmtRtnVal(iof);
                break;
        }
        
    return (output ? output.replace(/#/g," "+num+" ") : num);
    }
    //返回整数或者两位小数的浮点数
    Number.prototype.fmtRtnVal = function (intOrFloat){
        
    return (intOrFloat == 0 ? Math.floor(this) : parseInt(this*100)/100);
    }
    //根据当前日期所在年和周数返回周日的日期
    Date.prototype.RtnByWeekNum = function (weekNum){
        
    if(typeof(weekNum) != "number")
            
    throw new Error(-1,"RtnByWeekNum(weekNum)的参数是数字类型.");
        
    var date = new Date(this.getFullYear(),0,1);
        
    var week = date.getDay();
        week 
    = (week==0?7:week);
        
    return date.dateAfter(weekNum*7-week,1);
    }
    //根据日期返回该日期所在年的周数
    Date.prototype.getWeekNum = function (){
        
    var dat = new Date(this.getFullYear(),0,1);
        
    var week = dat.getDay();
        week 
    = (week==0?7:week);
        
    var days = this.calDateDistance(dat,"dd")+1;
        
    return ((days + 6 - this.getDay() - 7 + week)/7);
    }

    //-->
    </script>

    <script language="JavaScript">
    <!--
    var dw = document.write;
    var date2 = "2005-12-30".parseDate();
    dw(date2,
    "<br>");
    var date3 = "2006-1-10 11 11 11".parseDate();
    dw(date2.calDateDistance(date3,
    null,null,"时间差为#天!"));
    //alert(new Date(2000,2,-29));
    //
    -->
    </script>
  • 相关阅读:
    MOSS中的User的Title, LoginName, DisplayName, SID之间的关系
    如何在Network Monitor中高亮间隔时间过长的帧?
    SharePoint服务器如果需要安装杀毒软件, 需要注意什么?
    如何查看SQL Profiler? 如何查看SQL死锁?
    什么是Telnet
    The name or security ID (SID) of the domain specified is inconsistent with the trust information for that domain.
    Windows SharePoint Service 3.0的某个Web Application无搜索结果
    网络连接不上, 有TCP错误, 如果操作系统是Windows Server 2003, 请尝试一下这里
    在WinDBG中查看内存的命令
    The virtual machine could not be started because the hypervisor is not running
  • 原文地址:https://www.cnblogs.com/eflylab/p/1391349.html
Copyright © 2011-2022 走看看