【www.gdgbn.com--时间日期】

一、把字符串转换为日期对象   有时需要把字符串转换为日期对象,但是ie下不支持new date(“2011-04-07”)这样实例化日期对象,ff下支持,所以写了一个扩展函数,用来把形如yyyy-mm-dd或者dd/mm/yyyy的字符串转换为日期对象。代码如下:
convertdate
1 /*
2 函数:把字符串转换为日期对象
3 参数:yyyy-mm-dd或dd/mm/yyyy形式的字符串
4 返回:date对象
5 注:ie下不支持直接实例化日期对象,如new date("2011-04-06")
6  */
7 date.prototype.convertdate = function (date) {
8 var flag = true;
9 var datearray = date.split("-");
10 if (datearray.length != 3) {
11 datearray = date.split("/");
12 if (datearray.length != 3) {
13 return null;
14 }
15 flag = false;
16 }
17 var newdate = new date();
18 if (flag) {
19 // month从0开始
20   newdate.setfullyear(datearray[0], datearray[1] - 1, datearray[2]);
21 }
22 else {
23 newdate.setfullyear(datearray[2], datearray[1] - 1, datearray[0]);
24 }
25 newdate.sethours(0, 0, 0);
26 return newdate;
27 };
 测试: <script type="text/网页特效">
  document.writeln(new date().convertdate("7/12/2011"));
</script>
 输出:   wed dec 07 2011 17:30:58 gmt+0800
二、计算两个日期之间的差值 这个函数可以计算两个日期之前的差值(毫秒/秒/分/小时/天),主要用到了gettime()函数和math.floor()函数,代码如下:
datediff
1 /*
2 函数:计算两个日期之间的差值
3 参数:date是日期对象
4 flag:ms-毫秒,s-秒,m-分,h-小时,d-天,m-月,y-年
5 返回:当前日期和date两个日期相差的毫秒/秒/分/小时/天
6  */
7 date.prototype.datediff = function (date, flag) {
8 var mscount;
9 var diff = this.gettime() - date.gettime();
10 switch (flag) {
11 case "ms":
12 mscount = 1;
13 break;
14 case "s":
15 mscount = 1000;
16 break;
17 case "m":
18 mscount = 60 * 1000;
19 break;
20 case "h":
21 mscount = 60 * 60 * 1000;
22 break;
23 case "d":
24 mscount = 24 * 60 * 60 * 1000;
25 break;
26 }
27 return math.floor(diff / mscount);
28 };
测试: <script type="text/javascript">
  var d1 = new date().convertdate("2011-04-08");
  var d2 = new date().convertdate("2011-04-07");
  document.writeln(d1.datediff(d2, "d"));
</script>  结果:   1
  三、判断一个年份是否为闰年 代码: isleapyear
1 /*
2 函数:判断一个年份是否为闰年
3 返回:是否为闰年
4  */
5 date.prototype.isleapyear = function () {
6 var year = this.getfullyear();
7 return (year % 4 == 0) && (year % 100 != 0 || year % 400 == 0);
8 }
测试: <script type="text/javascript">
  document.writeln(new date().convertdate("2000-04-08").isleapyear() + "
");
  document.writeln(new date().convertdate("2011-04-08").isleapyear() + "
");
</script>  结果:  true
 false
四、格式化日期
这个函数是从网上搜来的,稍微修改了一下,它类似.net中format函数,传入格式化字符串如”yyyy-mm-dd”,返回格式化后的日期。 format
1 /*
2 函数:格式化日期
3 参数:formatstr-格式化字符串
4 d:将日显示为不带前导零的数字,如1
5 dd:将日显示为带前导零的数字,如01
6 ddd:将日显示为缩写形式,如sun
7 dddd:将日显示为全名,如sunday
8 m:将月份显示为不带前导零的数字,如一月显示为1
9 mm:将月份显示为带前导零的数字,如01
10 mmm:将月份显示为缩写形式,如jan
11 mmmm:将月份显示为完整月份名,如january
12 yy:以两位数字格式显示年份
13 yyyy:以四位数字格式显示年份
14 h:使用12小时制将小时显示为不带前导零的数字,注意||的用法
15 hh:使用12小时制将小时显示为带前导零的数字
16 h:使用24小时制将小时显示为不带前导零的数字
17 hh:使用24小时制将小时显示为带前导零的数字
18 m:将分钟显示为不带前导零的数字
19 mm:将分钟显示为带前导零的数字
20 s:将秒显示为不带前导零的数字
21 ss:将秒显示为带前导零的数字
22 l:将毫秒显示为不带前导零的数字
23 ll:将毫秒显示为带前导零的数字
24 tt:显示am/pm
25 tt:显示am/pm
26 返回:格式化后的日期
27 */
28 date.prototype.format = function (formatstr) {
29 var date = this;
30
31 /*
32 函数:填充0字符
33 参数:value-需要填充的字符串, length-总长度
34 返回:填充后的字符串
35 */
36 var zeroize = function (value, length) {
37 if (!length) {
38 length = 2;
39 }
40 value = new string(value);
41 for (var i = 0, zeros = ""; i < (length - value.length); i++) {
42 zeros += "0";
43 }
44 return zeros + value;
45 };
46
47 return formatstr.replace(/"[^"]*"|"[^"]*"|b(?:d{1,4}|m{1,4}|yy(?:yy)?|([hhmstt])1?|[llz])b/g, function($0) {
48 switch ($0) {
49 case "d": return date.getdate();
50 case "dd": return zeroize(date.getdate());
51 case "ddd": return ["sun", "mon", "tue", "wed", "thr", "fri", "sat"][date.getday()];
52 case "dddd": return ["sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"][date.getday()];
53 case "m": return date.getmonth() + 1;
54 case "mm": return zeroize(date.getmonth() + 1);
55 case "mmm": return ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"][date.getmonth()];
56 case "mmmm": return ["january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december"][date.getmonth()];
57 case "yy": return new string(date.getfullyear()).substr(2);
58 case "yyyy": return date.getfullyear();
59 case "h": return date.gethours() % 12 || 12;
60 case "hh": return zeroize(date.gethours() % 12 || 12);
61 case "h": return date.gethours();
62 case "hh": return zeroize(date.gethours());
63 case "m": return date.getminutes();
64 case "mm": return zeroize(date.getminutes());
65 case "s": return date.getseconds();
66 case "ss": return zeroize(date.getseconds());
67 case "l": return date.getmilliseconds();
68 case "ll": return zeroize(date.getmilliseconds());
69 case "tt": return date.gethours() < 12 ? "am" : "pm";
70 case "tt": return date.gethours() < 12 ? "am" : "pm";
71 }
72 });
73 }
测试: <script type="text/javascript">
  document.writeln(new date().format("yyyy-mm-dd hh:mm:ss"));
</script> 结果: 2011-04-08 10:13:37

本文来源:http://www.gdgbn.com/wangyetexiao/29773/