几个js处理时间函数

最近想要慢慢建立自己的代码库,整理了几个之前用到的js处理时间的函数,发出来跟大家分享一下,以后的使用中会不断增加和修改代码库。

一、把字符串转换为日期对象

  有时需要把字符串转换为日期对象,但是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 returnnull;
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/javascript">
  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() + "<br />");
  document.writeln(new Date().convertDate("2011-04-08").isLeapYear() + "<br />");
</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': returnnew 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

以后的工作和学习中,会不断增加和完善自己的代码库,有什么问题请多多指教

更多内容,请扫码关注微信公众号“程序媛蒲苇”

原文地址:https://www.cnblogs.com/puwei222/p/2009792.html