`
leo1211
  • 浏览: 140386 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

js Date对象扩展

阅读更多

Date.prototype.isLeapYear 判断闰年
Date.prototype.Format 日期格式化
Date.prototype.DateAdd 日期计算
Date.prototype.DateDiff 比较日期差
Date.prototype.toString 日期转字符串
Date.prototype.toArray 日期分割为数组
Date.prototype.DatePart 取日期的部分信息
Date.prototype.MaxDayOfDate 取日期所在月的最大天数
Date.prototype.WeekNumOfYear 判断日期所在年的第几周
StringToDate 字符串转日期型
IsValidDate 验证日期有效性
CheckDateTime 完整日期时间检查
daysBetween 日期天数差

js 代码:

//---------------------------------------------------  
// 判断闰年  
//---------------------------------------------------
  
Date.prototype.isLeapYear = function()   
{   
    return (0==this.getYear()%4&&((this.getYear()%100!=0)||(this.getYear()%400==0)));   
}   
  
//---------------------------------------------------  
// 日期格式化  
// 格式 YYYY/yyyy/YY/yy 表示年份  
// MM/M 月份  
// W/w 星期  
// dd/DD/d/D 日期  
// hh/HH/h/H 时间  
// mm/m 分钟  
// ss/SS/s/S 秒  
//---------------------------------------------------
  
Date.prototype.Format = function(formatStr)   
{   
    var str = formatStr;   
    var Week = ['日','一','二','三','四','五','六'];  
  
    str=str.replace(/yyyy|YYYY/,this.getFullYear());   
    str=str.replace(/yy|YY/,(this.getYear() % 100)>9?(this.getYear() % 100).toString():'0' + (this.getYear() % 100));   
  
    str=str.replace(/MM/,this.getMonth()>9?this.getMonth().toString():'0' + this.getMonth());   
    str=str.replace(/M/g,this.getMonth());   
  
    str=str.replace(/w|W/g,Week[this.getDay()]);   
  
    str=str.replace(/dd|DD/,this.getDate()>9?this.getDate().toString():'0' + this.getDate());   
    str=str.replace(/d|D/g,this.getDate());   
  
    str=str.replace(/hh|HH/,this.getHours()>9?this.getHours().toString():'0' + this.getHours());   
    str=str.replace(/h|H/g,this.getHours());   
    str=str.replace(/mm/,this.getMinutes()>9?this.getMinutes().toString():'0' + this.getMinutes());   
    str=str.replace(/m/g,this.getMinutes());   
  
    str=str.replace(/ss|SS/,this.getSeconds()>9?this.getSeconds().toString():'0' + this.getSeconds());   
    str=str.replace(/s|S/g,this.getSeconds());   
  
    return str;   
}   
  
//+---------------------------------------------------  
//| 求两个时间的天数差 日期格式为 YYYY-MM-dd   
//+---------------------------------------------------
  
function daysBetween(DateOne,DateTwo)  
{   
    var OneMonth = DateOne.substring(5,DateOne.lastIndexOf ('-'));  
    var OneDay = DateOne.substring(DateOne.length,DateOne.lastIndexOf ('-')+1);  
    var OneYear = DateOne.substring(0,DateOne.indexOf ('-'));  
  
    var TwoMonth = DateTwo.substring(5,DateTwo.lastIndexOf ('-'));  
    var TwoDay = DateTwo.substring(DateTwo.length,DateTwo.lastIndexOf ('-')+1);  
    var TwoYear = DateTwo.substring(0,DateTwo.indexOf ('-'));  
  
    var cha=((Date.parse(OneMonth+'/'+OneDay+'/'+OneYear)- Date.parse(TwoMonth+'/'+TwoDay+'/'+TwoYear))/86400000);   
    return Math.abs(cha);  
}  
  
  
//+---------------------------------------------------  
//| 日期计算  
//+---------------------------------------------------
  
Date.prototype.DateAdd = function(strInterval, Number) {   
    var dtTmp = this;  
    switch (strInterval) {   
        case 's' :return new Date(Date.parse(dtTmp) + (1000 * Number));  
        case 'n' :return new Date(Date.parse(dtTmp) + (60000 * Number));  
        case 'h' :return new Date(Date.parse(dtTmp) + (3600000 * Number));  
        case 'd' :return new Date(Date.parse(dtTmp) + (86400000 * Number));  
        case 'w' :return new Date(Date.parse(dtTmp) + ((86400000 * 7) * Number));  
        case 'q' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number*3, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());  
        case 'm' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());  
        case 'y' :return new Date((dtTmp.getFullYear() + Number), dtTmp.getMonth(), dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());  
    }  
}  
  
//+---------------------------------------------------  
//| 比较日期差 dtEnd 格式为日期型或者 有效日期格式字符串  
//+---------------------------------------------------
  
Date.prototype.DateDiff = function(strInterval, dtEnd) {   
    var dtStart = this;  
    if (typeof dtEnd == 'string' )//如果是字符串转换为日期型  
    {   
        dtEnd = StringToDate(dtEnd);  
    }  
    switch (strInterval) {   
        case 's' :return parseInt((dtEnd - dtStart) / 1000);  
        case 'n' :return parseInt((dtEnd - dtStart) / 60000);  
        case 'h' :return parseInt((dtEnd - dtStart) / 3600000);  
        case 'd' :return parseInt((dtEnd - dtStart) / 86400000);  
        case 'w' :return parseInt((dtEnd - dtStart) / (86400000 * 7));  
        case 'm' :return (dtEnd.getMonth()+1)+((dtEnd.getFullYear()-dtStart.getFullYear())*12) - (dtStart.getMonth()+1);  
        case 'y' :return dtEnd.getFullYear() - dtStart.getFullYear();  
    }  
}  
  
//+---------------------------------------------------  
//| 日期输出字符串,重载了系统的toString方法  
//+---------------------------------------------------  
Date.prototype.toString = function(showWeek)  
{   
    var myDate= this;  
    var str = myDate.toLocaleDateString();  
    if (showWeek)  
    {   
        var Week = ['日','一','二','三','四','五','六'];  
        str += ' 星期' + Week[myDate.getDay()];  
    }  
    return str;  
}  
  
//+---------------------------------------------------  
//| 日期合法性验证  
//| 格式为:YYYY-MM-DD或YYYY/MM/DD  
//+---------------------------------------------------
  
function IsValidDate(DateStr)   
{   
    var sDate=DateStr.replace(/(^\s+|\s+$)/g,''); //去两边空格;   
    if(sDate=='') return true;   
    //如果格式满足YYYY-(/)MM-(/)DD或YYYY-(/)M-(/)DD或YYYY-(/)M-(/)D或YYYY-(/)MM-(/)D就替换为''   
    //数据库中,合法日期可以是:YYYY-MM/DD(2003-3/21),数据库会自动转换为YYYY-MM-DD格式   
    var s = sDate.replace(/[\d]{ 4,4 }[\-/]{ 1 }[\d]{ 1,2 }[\-/]{ 1 }[\d]{ 1,2 }/g,'');   
    if (s=='') //说明格式满足YYYY-MM-DD或YYYY-M-DD或YYYY-M-D或YYYY-MM-D   
    {   
        var t=new Date(sDate.replace(/\-/g,'/'));   
        var ar = sDate.split(/[-/:]/);   
        if(ar[0] != t.getYear() || ar[1] != t.getMonth()+1 || ar[2] != t.getDate())   
        {   
            //alert('错误的日期格式!格式为:YYYY-MM-DD或YYYY/MM/DD。注意闰年。');   
            return false;   
        }   
    }   
    else   
    {   
        //alert('错误的日期格式!格式为:YYYY-MM-DD或YYYY/MM/DD。注意闰年。');   
        return false;   
    }   
    return true;   
}   
  
//+---------------------------------------------------  
//| 日期时间检查  
//| 格式为:YYYY-MM-DD HH:MM:SS  
//+---------------------------------------------------
  
function CheckDateTime(str)  
{   
    var reg = /^(\d+)-(\d{ 1,2 })-(\d{ 1,2 }) (\d{ 1,2 }):(\d{ 1,2 }):(\d{ 1,2 })$/;   
    var r = str.match(reg);   
    if(r==null)return false;   
    r[2]=r[2]-1;   
    var d= new Date(r[1],r[2],r[3],r[4],r[5],r[6]);   
    if(d.getFullYear()!=r[1])return false;   
    if(d.getMonth()!=r[2])return false;   
    if(d.getDate()!=r[3])return false;   
    if(d.getHours()!=r[4])return false;   
    if(d.getMinutes()!=r[5])return false;   
    if(d.getSeconds()!=r[6])return false;   
    return true;   
}   
  
//+---------------------------------------------------  
//| 把日期分割成数组  
//+---------------------------------------------------  
Date.prototype.toArray = function()  
{   
    var myDate = this;  
    var myArray = Array();  
    myArray[0] = myDate.getFullYear();  
    myArray[1] = myDate.getMonth();  
    myArray[2] = myDate.getDate();  
    myArray[3] = myDate.getHours();  
    myArray[4] = myDate.getMinutes();  
    myArray[5] = myDate.getSeconds();  
    return myArray;  
}  
  
//+---------------------------------------------------  
//| 取得日期数据信息  
//| 参数 interval 表示数据类型  
//| y 年 m月 d日 w星期 ww周 h时 n分 s秒  
//+---------------------------------------------------
  
Date.prototype.DatePart = function(interval)  
{   
    var myDate = this;  
    var partStr='';  
    var Week = ['日','一','二','三','四','五','六'];  
    switch (interval)  
    {   
        case 'y' :partStr = myDate.getFullYear();break;  
        case 'm' :partStr = myDate.getMonth()+1;break;  
        case 'd' :partStr = myDate.getDate();break;  
        case 'w' :partStr = Week[myDate.getDay()];break;  
        case 'ww' :partStr = myDate.WeekNumOfYear();break;  
        case 'h' :partStr = myDate.getHours();break;  
        case 'n' :partStr = myDate.getMinutes();break;  
        case 's' :partStr = myDate.getSeconds();break;  
    }  
    return partStr;  
}  
  
//+---------------------------------------------------  
//| 取得当前日期所在月的最大天数  
//+---------------------------------------------------
  
Date.prototype.MaxDayOfDate = function()  
{   
    var myDate = this;  
    var ary = myDate.toArray();  
    var date1 = (new Date(ary[0],ary[1]+1,1));  
    var date2 = date1.dateAdd(1,'m',1);  
    var result = dateDiff(date1.Format('yyyy-MM-dd'),date2.Format('yyyy-MM-dd'));  
    return result;  
}  
  
//+---------------------------------------------------  
//| 取得当前日期所在周是一年中的第几周  
//+---------------------------------------------------
  
Date.prototype.WeekNumOfYear = function()  
{   
    var myDate = this;  
    var ary = myDate.toArray();  
    var year = ary[0];  
    var month = ary[1]+1;  
    var day = ary[2];  
    document.write('< script language=VBScript\> \n');  
    document.write('myDate = DateValue(''+month+'-'+day+'-'+year+'') \n');  
    document.write('result = DatePart('ww', myDate) \n');  
    document.write(' \n');  
    return result;  
}  
  
//+---------------------------------------------------  
//| 字符串转成日期类型   
//| 格式 MM/dd/YYYY MM-dd-YYYY YYYY/MM/dd YYYY-MM-dd  
//+---------------------------------------------------
  
function StringToDate(DateStr)  
{   
  
    var converted = Date.parse(DateStr);  
    var myDate = new Date(converted);  
    if (isNaN(myDate))  
    {   
        //var delimCahar = DateStr.indexOf('/')!=-1?'/':'-';  
        var arys= DateStr.split('-');  
        myDate = new Date(arys[0],--arys[1],arys[2]);  
    }  
    return myDate;  

分享到:
评论
1 楼 t42dw 2010-07-31  
大哥,你这扩展都测过没有?

Date.prototype.Format 输出的日期中的月不对呀,getMonth()你没加一呢

相关推荐

    Javascript 日期对象Date扩展

    Date对象扩展,包括常用中文日期格式解析、加减操作、日期差、周操作和季操作。具体扩展的方法如下: parseCHS--静态方法。解析常用的中文日期并返回日期对象。 add--日期加减操作。[注:此函数在上传时还存在...

    关于js的Date对象的有用扩展

    在“关于js的Date对象的有用扩展”中,我们可以看到一些额外的功能或方法,可能是对原生Date对象的扩展,以满足更复杂的日期处理需求。 在`date.js`文件中,很可能包含了一些自定义函数或原型扩展,这些扩展可能...

    javascript转换日期字符串为Date日期对象的方法.docx

    ### JavaScript 转换日期字符串为 Date 日期对象的方法 在 JavaScript 开发中,处理日期是非常常见的需求之一。很多时候,我们需要将用户输入或其他来源得到的日期字符串转换为 `Date` 对象,以便进行进一步的计算...

    Javascript 日期对象Date扩展方法

    在标题和描述中提到的“Date对象扩展”是指通过原型链对Date对象进行扩展,添加自定义方法以满足更复杂的日期处理需求。下面我们将详细探讨这些扩展方法及其应用。 1. **日期格式化**: 通过`Format`方法,我们...

    w3cshool之JavaScript对象_Date

    ### JavaScript Date 对象详解 #### 一、概述 在JavaScript编程语言中,`Date`对象是一种非常实用且功能强大的工具,主要用于处理与日期和时间相关的数据。通过`Date`对象,开发者可以轻松地获取系统当前的日期和...

    JS中获取Date对象实现实时钟表小demo

    JavaScript的Date对象提供了更多的方法和属性,如`getTimezoneOffset()`(获取本地时间与UTC时间的分钟差)、`toUTCString()`(转换为UTC字符串)等,可以根据需求进行扩展和定制。此外,现代JavaScript还引入了`...

    javascript中Date format(js日期格式化)方法小结.docx

    ### JavaScript中的Date Format(JS日期格式化)方法详解 #### 概述 在日常的Web开发工作中,我们经常需要处理日期和时间相关的数据。JavaScript 的 `Date` 对象提供了多种方法来获取和设置日期时间,但原生 API 并...

    js date

    DP_DateExtensions.js是一个为JavaScript的`Date`对象扩展了更多功能的库,它提供了方便的日期比较、日期间隔计算以及各种格式化选项。例如,你可以方便地检查日期是否在另一日期之前或之后,或者计算两个日期之间的...

    javascript中Date对象应用之简易日历实现_.docx

    ### JavaScript中Date对象应用之简易日历实现 #### 前言 简易日历作为JavaScript中Date对象的一个典型应用场景,在日常开发中具有重要的实用价值。本文将详细介绍如何使用JavaScript中的Date对象来实现一个简易的...

    ASP.NET AJAX深入浅出系列课程(7):Microsoft AJAX Library对于JavaScript原生对象的扩展(上)

    在AJAX库中,你可以找到如parseDate和formatDate这样的函数,它们分别用于解析和格式化日期字符串,解决了JavaScript原生Date对象在这方面的不足。此外,还有新增的时间比较和操作方法,如add和subtract,方便开发者...

    扩展JS Date对象时间格式化功能的小例子

    在本文中,我们讲解了如何扩展JavaScript的Date对象,以实现自定义的日期时间格式化功能。这个功能的实现主要是通过添加一个新的Date.prototype.format方法来完成的。 首先,我们要了解Date对象自带的一些方法,如...

    ASP.NET AJAX深入浅出系列课程(8):Microsoft AJAX Library对于JavaScript原生对象的扩展(下)

    2. **Date对象的扩展**:微软AJAX库扩展了Date对象,添加了处理日期和时间的新方法,如`addTime()`和`getTimeValue()`。这使得开发者能更方便地进行日期计算和格式化,适应复杂的日期时间操作需求。 3. **Function...

    比较好的时间Date.js文件

    总结来说,Date.js是一个优秀的JavaScript日期处理库,它通过提供丰富的API和优秀的国际化支持,弥补了原生Date对象的不足。无论是在前端还是后端开发中,Date.js都是处理日期和时间问题的强大工具。开发者可以通过...

    javascript的date转化器

    这个“javascript的date转化器”可能是一个自定义的库或函数集合,旨在简化和扩展JavaScript内置Date对象的功能,以满足更复杂的日期操作需求。在JavaScript中,Date对象允许我们创建、读取、操作和格式化日期。 1....

    Date对象的补充函数,包括类似Python中的strftime()

    总结来说,datetime.js-master是一个专注于日期和时间处理的JavaScript工具包,它扩展了Date对象的功能,使其能像Python的strftime()那样灵活地格式化日期。这对于进行web应用开发,特别是需要大量处理日期展示的...

    js自定义对象讲解

    它们与JS的标准对象相对,后者如Date、Array等是由语言内置的。 1.2.2 原型(prototype) 原型是JavaScript中一种特殊的概念,它允许我们在运行时为对象添加新的属性和方法。通过`prototype`,我们可以扩展内置对象...

    ASP.NET AJAX深入浅出系列课程(7):Microsoft AJAX Library对于JavaScript原生对象的扩展_PDF.zip

    Date对象在JavaScript中用于处理日期和时间。在Microsoft AJAX Library中,日期处理变得更加灵活,添加了如`addDays()`、`addMonths()`、`addYears()`等方法,可以方便地对日期进行加减操作,这对于处理时间相关的...

    Juno-Myanmar-Date:Javascript Myanmar Date插件,扩展的Javascript本机日期对象

    此插件在Javascript本地Date对象上进行了扩展。 例子: var date= new Date('10-23-2015'); /* @ Date.mmFormat(format,ref) * ref will be eng=English (Default), uni= Unicode, zg=Zawgyi */ date.mmFormat('d/...

    extended-date:JavaScript中“ Date”对象的扩展,以简化与日期相关的常用实现

    所有这些扩展都极大地增强了JavaScript的Date对象,使得开发者能够更高效地处理各种日期相关的挑战。 总之,"extended-date"是JavaScript Date对象的一个增强版本,它提供了许多实用的扩展方法,以简化日期处理的...

Global site tag (gtag.js) - Google Analytics