zoukankan      html  css  js  c++  java
  • 几个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

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

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

  • 相关阅读:
    css 学习笔记 菜鸟
    html学习 菜鸟
    flask 杂记2
    logging 为全局的日志工具对象添加日志记录器
    flask 框架 转载:https://cloud.tencent.com/developer/article/1465968
    flask 框架 转载:https://cloud.tencent.com/developer/article/1465949
    flask blueprint
    [ZJOI2005]午餐
    [ZJOI2006]皇帝的烦恼
    数位dp小练
  • 原文地址:https://www.cnblogs.com/puwei222/p/2009792.html
Copyright © 2011-2022 走看看