[js]javascript日期时间的获取及常用操作

javascript的日期对象

var myDate = new Date();

myDate.getYear();                           //获取当前年份(2位)

myDate.getFullYear();                       //获取完整的年份(4位,1970-????)

myDate.getMonth();                          //获取当前月份(0-11,0代表1月)

myDate.getDate();                           //获取当前日(1-31)

myDate.getDay();                            //获取当前星期X(0-6,0代表星期天)

myDate.getTime();                           //获取当前时间(从1970.1.1开始的毫秒数)

myDate.getHours();                          //获取当前小时数(0-23)

myDate.getMinutes();                        //获取当前分钟数(0-59)

myDate.getSeconds();                        //获取当前秒数(0-59)

myDate.getMilliseconds();                   //获取当前毫秒数(0-999)

myDate.toLocaleDateString();                //获取当前日期

var mytime=myDate.toLocaleTimeString();     //获取当前时间

myDate.toLocaleString( );                   //获取日期与时间

日期时间的javascript原型方法

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方法

//+---------------------------------------------------  
//| 日期输出字符串,重载了系统的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 = Datue(''+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;  
}

当前日期加时间(如:2009-06-12 12:00)

function CurentTime()
    { 
        var now = new Date();       
        var year = now.getFullYear();       //年
        var month = now.getMonth() + 1;     //月
        var day = now.getDate();            //日       
        var hh = now.getHours();            //时
        var mm = now.getMinutes();          //分
       
        var clock = year + "-";       
        if(month < 10)
            clock += "0";       
        clock += month + "-";       
        if(day < 10)
            clock += "0";           
        clock += day + " ";       
        if(hh < 10)
            clock += "0";           
        clock += hh + ":";
        if (mm < 10) clock += '0'; 
        clock += mm; 
        return(clock); 
    }

js 日期常用的方法

// 增加天 
function AddDays(date,value) 
{ 
date.setDate(date.getDate()+value); 
} 
 
// 增加月 
function AddMonths(date,value) 
{ 
date.setMonth(date.getMonth()+value); 
} 
 
// 增加年 
function AddYears(date,value) 
{ 
date.setFullYear(date.getFullYear()+value); 
} 
 
// 是否为今天 
function IsToday(date) 
{ 
return IsDateEquals(date,new Date()); 
} 
 
// 是否为当月 
function IsThisMonth(date) 
{ 
return IsMonthEquals(date,new Date()); 
} 
 
// 两个日期的年是否相等 
function IsMonthEquals(date1,date2) 
{ 
return date1.getMonth()==date2.getMonth()&&date1.getFullYear()==date2.getFullYear(); 
} 
 
// 判断日期是否相等 
function IsDateEquals(date1,date2) 
{ 
return date1.getDate()==date2.getDate()&&IsMonthEquals(date1,date2); 
} 
 
// 返回某个日期对应的月份的天数 
function GetMonthDayCount(date) 
{ 
switch(date.getMonth()+1) 
{ 
case 1:case 3:case 5:case 7:case 8:case 10:case 12: 
return 31; 
case 4:case 6:case 9:case 11: 
return 30; 
} 
//feb: 
date=new Date(date); 
var lastd=28; 
date.setDate(29); 
while(date.getMonth()==1) 
{ 
lastd++; 
AddDays(date,1); 
} 
return lastd; 
} 
 
// 返回两位数的年份 
function GetHarfYear(date) 
{ 
var v=date.getYear(); 
if(v>9)return v.toString(); 
return "0"+v; 
} 
 
// 返回月份(修正为两位数) 
function GetFullMonth(date) 
{ 
var v=date.getMonth()+1; 
if(v>9)return v.toString(); 
return "0"+v; 
} 
 
// 返回日 (修正为两位数) 
function GetFullDate(date) 
{ 
var v=date.getDate(); 
if(v>9)return v.toString(); 
return "0"+v; 
} 
 
// 替换字符串 
function Replace(str,from,to) 
{ 
return str.split(from).join(to); 
} 
 
// 格式化日期的表示 
function FormatDate(date,str) 
{ 
str=Replace(str,"yyyy",date.getFullYear()); 
str=Replace(str,"MM",GetFullMonth(date)); 
str=Replace(str,"dd",GetFullDate(date)); 
str=Replace(str,"yy",GetHarfYear(date)); 
str=Replace(str,"M",date.getMonth()+1); 
str=Replace(str,"d",date.getDate()); 
return str; 
} 
 
// 统一日期格式 
function ConvertDate(str) 
{ 
str=(str+"").replace(/^\s*/g,"").replace(/\s*$/g,""); // 去除前后的空白 
var d; 
if(/^[0-9]{8}$/.test(str)) // 20040226 -> 2004-02-26 
{ 
d=new Date(new Number(str.substr(0,4)),new Number(str.substr(4,2))-1,new Number(str.substr(6,2))); 
if(d.getTime())return d; 
} 
d=new Date(str); 
if(d.getTime())return d; 
d=new Date(Replace(str,"-","/")); 
if(d.getTime())return d; 
return null; 
}  
js时间差函数 
<SCRIPT type="text/javascript"> 
  alert(addDay(-30,1)); 
  alert(addDay(-30,2)); 
  alert(addDay(-30,3)); 
  alert(addDay(-30,0)); 
   
function addDay(days,n) 
{ 
  //函数说明:days日期差,n代表如下含义。 
  var my_date_ago=new Date(new Date() - days * 24 * 60 * 60 * 1000 * -1);//days天的日期 
  switch (n) 
  { 
    case 1: 
    //返回年 
    return(my_date_ago.getFullYear()); 
    break; 
    case 2: 
    //返回月 
    return(my_date_ago.getMonth()+1); 
    break; 
    case 3: 
    //返回日 
    return(my_date_ago.getDate()); 
    break; 
    default : 
    //返回全部 
    return(my_date_ago.getFullYear() + "-" + (my_date_ago.getMonth()+1) + "-" + my_date_ago.getDate()); 
    break; 
  } 
}

总结

这里总结罗列了很多有关javascript的日期操作的方法,做个笔记,今后用到也方便查找。当然如果你的代码中有大量的日期操作的方法,如果自己不想扩展这些方法,也可以使用很多相关的 日期处理 的类库。moment.js就是一个很好的js日期处理的类库,我也用过,非常方便。下篇文章介绍吧。

分享到:更多 ()

23

评论前必须登录!

 

  1. #2

    My spouse and I absolutely love your blog and find nearly all of your post’s to be just what I’m looking for. Would you offer guest writers to write content for you? I wouldn’t mind composing a post or elaborating on a lot of the subjects you write regarding here. Again, awesome weblog!

    • Thanks! Of course you can post subjects here.All you have to do is to register a new account on left top of the homepage.
      Then goto the memeber center page where you can post your articles.

      admin5年前 (2015-12-25)
  2. #1

    I simply want to mention I am just beginner to blogging and seriously savored your page. Most likely I’m planning to bookmark your website . You certainly have awesome well written articles. Bless you for sharing with us your web site.

    see post5年前 (2016-03-03)