转自:http://www.nowamagic.net/javascript/js_TimeProcessFunctions.php
把字符串转换为日期对象
有时需要把字符串转换为日期对象,但是IE下不支持new Date("2011-04-07")这样实例化日期对象,ff下支持,所以写了一个扩展函数,用来把形如yyyy-mm-dd或者dd/mm/yyyy的字符串转换为日期对象。代码如下:
07 | Date.prototype.convertDate = function (date)
|
10 | var dateArray = date.split( "-" ); |
11 | if (dateArray.length != 3)
|
13 | dateArray = date.split( "/" ); |
14 | if (dateArray.length != 3)
|
20 | var newDate =
new Date(); |
24 | newDate.setFullYear(dateArray[0], dateArray[1] - 1, dateArray[2]); |
28 | newDate.setFullYear(dateArray[2], dateArray[1] - 1, dateArray[0]); |
30 | newDate.setHours(0, 0, 0); |
测试:
1 | <script type= "text/javascript" > |
2 | document.writeln( new Date().convertDate( "7/12/2011" )); |
输出:Wed Dec 07 2011 17:30:58 GMT+0800
计算两个日期之间的差值
这个函数可以计算两个日期之前的差值(毫秒/秒/分/小时/天),主要用到了getTime()函数和Math.floor()函数,代码如下:
07 | Date.prototype.dateDiff = function (date, flag)
|
10 | var diff =
this .getTime() - date.getTime(); |
23 | msCount = 60 * 60 * 1000; |
26 | msCount = 24 * 60 * 60 * 1000; |
29 | return Math.floor(diff / msCount); |
测试:
1 | <script type= "text/javascript" > |
2 | var d1 =
new Date().convertDate( "2011-04-08" ); |
3 | var d2 =
new Date().convertDate( "2011-04-07" ); |
4 | document.writeln(d1.dateDiff(d2,
'd' )); |
判断一个年份是否为闰年
5 | Date.prototype.isLeapYear = function ()
|
7 | var year =
this .getFullYear(); |
8 | return (year % 4 == 0) && (year % 100 != 0 || year % 400 == 0); |
测试:
1 | <script type= "text/javascript" > |
2 | document.writeln( new Date().convertDate( "2000-04-08" ).isLeapYear() + "<br>" ); |
3 | document.writeln( new Date().convertDate( "2011-04-08" ).isLeapYear() + "<br>" ); |
格式化日期
这个函数是从网上搜来的,稍微修改了一下,它类似.net中Format函数,传入格式化字符串如"yyyy-MM-dd",返回格式化后的日期。
28 | Date.prototype.format = function (formatStr)
|
37 | var zeroize =
function (value, length)
|
43 | value = new
String(value); |
44 | for ( var
i = 0, zeros = '' ; i < (length - value.length); i++) |
51 | return formatStr.replace(/ "[^" ]*"| '[^' ]*'|\b(?:d{1,4}|M{1,4}|yy(?:yy)?|([hHmstT])\1?|[lLZ])\b/g, function ($0)
|
55 | case 'd' :
return date.getDate(); |
56 | case 'dd' :
return zeroize(date.getDate()); |
57 | case 'ddd' :
return [ 'Sun' , 'Mon' ,
'Tue' , 'Wed' ,
'Thr' , 'Fri' ,
'Sat' ][date.getDay()]; |
58 | case 'dddd' :
return [ 'Sunday' , 'Monday' ,
'Tuesday' , 'Wednesday' ,
'Thursday' , 'Friday' ,
'Saturday' ][date.getDay()]; |
59 | case 'M' :
return date.getMonth() + 1; |
60 | case 'MM' :
return zeroize(date.getMonth() + 1); |
61 | case 'MMM' :
return [ 'Jan' , 'Feb' ,
'Mar' , 'Apr' ,
'May' , 'Jun' ,
'Jul' , 'Aug' ,
'Sep' , 'Oct' ,
'Nov' , 'Dec' ][date.getMonth()]; |
62 | case 'MMMM' :
return [ 'January' , 'February' ,
'March' , 'April' ,
'May' , 'June' ,
'July' , 'August' ,
'September' , 'October' ,
'November' , 'December' ][date.getMonth()]; |
63 | case 'yy' :
return new
String(date.getFullYear()).substr(2); |
64 | case 'yyyy' :
return date.getFullYear(); |
65 | case 'h' :
return date.getHours() % 12 || 12; |
66 | case 'hh' :
return zeroize(date.getHours() % 12 || 12); |
67 | case 'H' :
return date.getHours(); |
68 | case 'HH' :
return zeroize(date.getHours()); |
69 | case 'm' :
return date.getMinutes(); |
70 | case 'mm' :
return zeroize(date.getMinutes()); |
71 | case 's' :
return date.getSeconds(); |
72 | case 'ss' :
return zeroize(date.getSeconds()); |
73 | case 'l' :
return date.getMilliseconds(); |
74 | case 'll' :
return zeroize(date.getMilliseconds()); |
75 | case 'tt' :
return date.getHours() < 12 ?
'am' : 'pm' ; |
76 | case 'TT' :
return date.getHours() < 12 ?
'AM' : 'PM' ; |
测试:
1 | <script type= "text/javascript" > |
2 | document.writeln( new Date().format( "yyyy-MM-dd hh:mm:ss" )); |