用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. ];
  1. //日期格式需要注意,因为考虑到要判断日期的连续性,会把该数组中元素转为时间戳;
  1. 然后要加入当前日期,获取:
  1. var date = new Date();
  2. var y = date.getFullYear();
  3. var m = date.getMonth()+1;
  4. var d = date.getDate();
  5. var today = y+'/'+m+'/'+d;

转时间戳方法:

  1. //转时间戳
  2. function time(date){
  3. return new Date(date);
  4. }

开始判断计数:

  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. }

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

  1. 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();

js返回一组日期中最近连续的天数的更多相关文章

  1. js 判断一组日期是否是连续的

    文章同步自个人博客:http://www.52cik.com/2016/07/10/consecutive-dates.html 这是群里一朋友问的问题,当时我说判断下 day 是否相邻即可,后来细想 ...

  2. JS返回一个字符串中长度最小的单词的长度

    题目:编写一个方法,返回字符串中最小长度的单词的长度. var str = 'What a good day today!'; 1 //方法一 2 function returnString1(str ...

  3. JS 求一组数中所有数的和以及平均值

    var arr = [10,20,30]; //计数器思想 var sum = 0; for(var i=0;i<arr.length;i++){ sum += arr[i]; } consol ...

  4. js怎样得出数组中某个数据最大连续出现的次数

     1:js怎样得出数组中某个数据最大连续出现的次数 var test=[1,2,3,3,2,2,2,3,3,3,3,5,3,3,3,3,3] ;    var j  = 0 ;    var max  ...

  5. 高并发分布式系统中生成全局唯一(订单号)Id js返回上一页并刷新、返回上一页、自动刷新页面 父页面操作嵌套iframe子页面的HTML标签元素 .net判断System.Data.DataRow中是否包含某列 .Net使用system.Security.Cryptography.RNGCryptoServiceProvider类与System.Random类生成随机数

    高并发分布式系统中生成全局唯一(订单号)Id   1.GUID数据因毫无规律可言造成索引效率低下,影响了系统的性能,那么通过组合的方式,保留GUID的10个字节,用另6个字节表示GUID生成的时间(D ...

  6. Jsの数组练习-求一组数中的最大值和最小值,以及所在位置

    要求:求一组数中的最大值和最小值,以及所在位置 代码实现: <!DOCTYPE html> <html lang="en"> <head> &l ...

  7. JS[获取两个日期中所有的月份]

    //------[获取两个日期中所有的月份中] function getMonthBetween(start,end){ var result = []; var s = start.split(&q ...

  8. JS window对象 返回浏览历史中的其他页面 go()方法,根据当前所处的页面,加载 history 列表中的某个具体的页面。 语法: window.history.go(number);

    返回浏览历史中的其他页面 go()方法,根据当前所处的页面,加载 history 列表中的某个具体的页面. 语法: window.history.go(number); 参数: 浏览器中,返回当前页面 ...

  9. js 时间戳转为日期格式

    原文:js 时间戳转为日期格式 js 时间戳转为日期格式 什么是Unix时间戳(Unix timestamp): Unix时间戳(Unix timestamp),或称Unix时间(Unix time) ...

随机推荐

  1. 更换SSL证书

    1.申请证书,需要提供完整域名(例如:xxx.aaa.com),会和证书完全匹配. 2.将证书上传到web服务器,例如我的nginx,在server中指定证书路径. 3.重启web服务器.(这个证书和 ...

  2. (转)十分钟了结MySQL information_schema

    十分钟了结MySQL information_schema  原文:http://www.cnblogs.com/shengdimaya/p/6920677.html information_sche ...

  3. java.io.IOException: Could not find status of job:job_1534233312603_0002

    hive执行插入数据操作 报错: 在hive console里面输入: set  hive.jobname.length=20; 再次执行好了:

  4. MySQL 5.7.21版本sql_mode=only_full_group_by问题

      用到GROUP BY 语句查询时com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #2 of SELECT ...

  5. Linux 命令学习之rm

    功能说明: rm 命令是对文件或目录进行删除操作. 语法:rm [-dfirv][--help][--version][文件或目录...] 补充说明:执行rm指令可删除文件或目录,如欲删除目录必须加上 ...

  6. 机器学习中的范数规则化之L0、L1与L2范数

    今天看到一篇讲机器学习范数规则化的文章,讲得特别好,记录学习一下.原博客地址(http://blog.csdn.net/zouxy09). 今天我们聊聊机器学习中出现的非常频繁的问题:过拟合与规则化. ...

  7. c++ ‘nullptr’ 在此作用域中尚未声明

    编译加上如下选项:-std=c++11 g++ 1.cpp -o k -std=c++11

  8. 正则表达式最后的/i是不区分大小写的意思

    eg: "/\/*install$/i" 正则表达式 代表什么意思   /表达式的内容/ ,php中的正则表达式都必须在 / / 内 \/是匹配"/" 号,*号 ...

  9. Vue双向绑定的关键:Object.defineProperty()

    这个方法了不起啊.vue.js和avalon.js 都是通过它实现双向绑定的.而且Object.observe也被草案发起人撤回了.所以defineProperty更有必要了解一下了. 先上几行代码看 ...

  10. wcf win7+iis7 异常消息为: 可能证书“CN=PmsWcfServer”没有能够进行密钥交换的私钥

    原因是证书没有用户权限,解决方法: 1.开始-运行-mmc 2.添加[证书]管理单元 3.选择[证书(本地计算机)]-[个人]-[证书],右击PmsWcfServer证书-[所有任务]-[管理密钥] ...