转自: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" )); |