zoukankan      html  css  js  c++  java
  • js返回一组日期中最近连续的天数

    用js获取一组日期(并把当天算入)中连续的天数

    刚开始可能想到单纯的比较日期大小判断连续, 而又有大小月,平闰年这些因素,还是时间戳来的安全;

    首先得有一组日期,比如:

    1 var arr = [
    2 '2016/02/28',
    3 '2016/02/29', 
    4 '2017/02/26', 
    5 '2017/02/27',
    6 '2017/02/28'
    7 ]; 
    //日期格式需要注意,因为考虑到要判断日期的连续性,会把该数组中元素转为时间戳;
    然后要加入当前日期,获取:
    var date = new Date();
    var y = date.getFullYear();
    var m = date.getMonth()+1;
    var d = date.getDate();
    var today = y+'/'+m+'/'+d;
    

    转时间戳方法:

    //转时间戳 
    function time(date){
            return new Date(date); 
    }

    开始判断计数:

     1 var num = 0;//声明计数变量;
     2 var le = arr.length;//数组长度;
     3 if(time(today)-time(arr[le-1])==86400000)
     4 //日期时间戳相差一天则连续;判断当前日期与最近一天
     5 {
     6     num=2;//满足条件,就有连续2天;
     7     //然后对数组循环判断,满足则num++;否则中断循环;
     8     for(var i=le; i>0; i--){
     9         if(time(arr[i-1])-time(arr[i-2])==86400000){
    10             num++; 
    11         }else{ 
    12             break;//如果只要找出所有连续的天数,不需要中断
    13                  }
    14             console.log(num);
    15         } 
    16 }else{
    17           console.log('第一天');
    18     }

    为了方便看效果可以将当前日期初始化;

    today = '2017/03/01';//为验证二月转三月特初始化;可省略

    完整的:

     1 function lianxuDay(){
     2                  var arr = [
     3                   '2016/02/28',
     4                   '2016/02/29', 
     5                   '2016/02/26', 
     6                   '2017/02/27',
     7                   '2017/02/28'
     8                 ];
     9                 var date = new Date();
    10                 var y = date.getFullYear();
    11                 var m = date.getMonth()+1;
    12                 var d = date.getDate();
    13                 var today = y+'/'+m+'/'+d;
    14                 today = '2017/03/01';//为验证二月转三月特初始化;可省略
    15                 console.log(today);
    16                 //转时间戳 
    17                 function time(date){
    18                     return new Date(date); 
    19                 }
    20                 var num = 0;//声明计数变量;
    21                 var le = arr.length;//数组长度;
    22                 //console.log(time(today)-time(arr[le-1]));
    23                 if(time(today)-time(arr[le-1])==86400000)
    24                          //日期时间戳相差一天则连续,此法虽笨,但实用;判断当前日期与最近一天
    25                 {
    26                     num=2;//满足条件,连续2天;
    27                     //然后对数组循环判断,满足则num++;否则中断循环;
    28                     for(var i=le; i>0; i--){
    29                         if(time(arr[i-1])-time(arr[i-2])==86400000){
    30                             num++; 
    31                         }else{ 
    32                             break;//如果只要找出所有连续的天数,不需要中断
    33                         }
    34                         console.log(num);
    35                     } 
    36                 }else{
    37                     console.log('第一天');
    38                 }
    39             }
    40             lianxuDay();                           
    View Code
  • 相关阅读:
    JVM 内存布局
    线程池总结
    Redis持久化
    Java编程基础
    toString()、String.valueOf、(String)强转
    4 种主流的 API 架构风格对比
    kubernetes 节点设置不可调度
    Linux下如何查看哪些进程占用的CPU内存资源最多
    Linux openssl1.0.2k升级openssl1.1.1e版本教程
    对一些权限题密码的说明
  • 原文地址:https://www.cnblogs.com/sheqiuluo/p/6902686.html
Copyright © 2011-2022 走看看