首页 > 其他分享 >JS获取当前日前几天前的日期、两个日期相差天数、当月的天数、几月前的日期

JS获取当前日前几天前的日期、两个日期相差天数、当月的天数、几月前的日期

时间:2024-07-09 09:29:13浏览次数:22  
标签:天数 JS date 日期 num 2020 var month monthDay

查询当前日N天前的日期

    /**
     * 查询当前日N天前的日期
     * @param {-6} num 为负则为前几天,为正则为后几天
     * @param {'2020-08-01'} aDate
     */
    getDate(num,aDate) {
      var d = aDate ? new Date(aDate) : new Date();
      var date = d.getDate();
      num = num ? num : 0;
      d.setDate(date + num);
      date = d.getDate();
      var year = d.getFullYear();
      var month = (d.getMonth() + 1) < 10 ? ('0' + (d.getMonth() + 1)) : (d.getMonth() + 1);
      var day = d.getDate() < 10 ? ('0' + d.getDate()) : d.getDate();
      return year + '-' + month + '-' + day;
    },

计算两个日期相差天数

/**
* 计算2个日期相差的天数
* @param {2020-08-19} adate 
* @param {2020-08-13} bdate 
*/
dateDiff(aDate, bDate) {
// '2020-08-29'转'2020/08/29'
var s1=aDate.replace(/-/g,"/");
var s2=bDate.replace(/-/g,"/");
var d1 = new Date(s1);
var d2 = new Date(s2);
// 获取相差天数的时间戳
var time = d1.getTime() - d2.getTime();
  return parseInt(time / (1000 * 60 * 60 * 24))
}

 获取传入日期,当月的天数

    /**
     * 获取某月份的天数
     * @params {'20200801'} date
     */
    getMonthDays(date){
      var _this = this;
      var year = date.substring(0,4);
      var month = date.substring(4,6);
      var monthInt = (month.charAt(0) == '0') 
        ? parseInt(month.substring(1)) 
        : parseInt(month);
      var yearInt = parseInt(year);
      // 判断是否闰年
      var leapYear = ((yearInt % 4 == 0) || (yearInt & 100 !==0) || (yearInt % 400 ==0))
        ? true :false;
      var monthDay = new Array(12);
      monthDay[0] = 31;
      monthDay[1] = leapYear ? 29 : 28;
      monthDay[2] = 31;
      monthDay[3] = 30;
      monthDay[4] = 31;
      monthDay[5] = 30;
      monthDay[6] = 31;
      monthDay[7] = 31;
      monthDay[8] = 30;
      monthDay[9] = 31;
      monthDay[10] = 30;
      monthDay[11] = 31;
      return monthDay[monthInt - 1]
    },

计算N月前或后的当天日期

如2020-03-31,num为-1,为1月前日期2020-02-29

如2020-03-31,num为1,为1月后日期2020-04-30

    /**
     * 计算N月后的日期
     * @param {3} num 可为正负
     * @param {'2020-08-01'} date 
     */
    getMonth(num,date){
      if(date.length>8){
        date = date.split('-').join('')
      }
      var _this = this;
      var year = date.substring(0,4); // 2020
      var month = date.substring(4,6); // 08
      var day = date.substring(6,8); // 01
      var dayInt = (day.charAt(0) == '0') 
        ? parseInt(day.substring(1)) 
        : parseInt(day); // 1
      var monthInt = (month.charAt(0) == '0') 
        ? parseInt(month.substring(1)) 
        : parseInt(month); // 8
      var yearInt = parseInt(year); // 2020
      var newYear = yearInt; // 2020
      var newDate = '';
      var newMonth = monthInt; // 8
      var newDay = dayInt; // 1 
      var months = monthInt + num; // 8 + num
      var dateVar = date; // 2020-08-01
      var monthDays = 0; 
      if (num >= 0) { // 日期往后
        while (months > 12) {
          months -=12;
          newYear++
        } 
      } else {
        while (month < 1) {
          months +=12;
          newYear--
        }
      }
      newMonth = months;
      dateVar = (newYear + '') + (newMonth < 10 
        ? ('0' + newMonth) 
        : ('' + newMonth) + '01'); // 20201001
      monthDays = this.getMonthDays(dateVar);
      if (dayInt < monthDays) {
        newDay = dayInt;
      } else {
        newDay = monthDays;
      }
      newDate = (newYear + '') + '-' + (newMonth < 10 
        ? ('0' + newMonth) 
        : ('' + newMonth))
        + '-' + (newDay < 10 ? ('0' + newDay) : newDay);
      return newDate;
    },

做个记录,随去随用。

标签:天数,JS,date,日期,num,2020,var,month,monthDay
From: https://blog.csdn.net/qq_54548545/article/details/140170068

相关文章

  • [JS]设计模式
    介绍设计模式就是在面向对象软件设计过程中,针对特定问题的简洁而优雅的解决方案目前说到设计模式,一般指<设计模式:可复用面向对象软件的基础>一书中提到的23种常见软件设计模式工厂模式在JavaScript中,工厂模式的表现形式就是一个调用即可返回新对象的函数<scri......
  • 05-JS中的内置类
    01原始类型的调用![[06-javascript基础/imgs/00041.png]]02Number包装类型![[06-javascript基础/imgs/00043.png]]示例1<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatib......
  • json数据写入到mysql数据中
    importpymysql#json文件中格式一个列表包含一个个的字典数据#[{"title":"胖猫事件-21岁游戏代练胖猫跳江身亡,PUA捞女女主谭竹遭网友报告视频","cover":"https://suvip888.com/20240516/U8NEMN2P/1.jpg","m3u8_url":"https://vodvip888.com/20240516/U8NEMN2P/......
  • 【js面试题】深入理解尾递归及其在JavaScript中的应用
    面试题:举例说明尾递归的理解,以及应用场景引言:在编程中,递归是一种常见的解决问题的方法,它允许函数调用自身来解决问题。然而,递归如果不当使用,可能会导致栈溢出错误,特别是在处理大量数据时。尾递归是一种特殊的递归形式,它能够优化递归调用,避免栈溢出的问题。本文将深入探......
  • 【JSP+Servlet+Maven】——优质外卖订餐系统之概论部分
    ......
  • 前端面试题29(js闭包和主要用途)
    JavaScript中的闭包是一个非常强大的特性,它允许一个函数访问并操作其词法作用域之外的变量。闭包的形成主要依赖于函数的作用域链,即函数可以访问在其外部定义的变量,即使外部函数已经执行完毕。下面我会通过几个方面来帮助你理解闭包的概念:闭包的定义闭包是一个函数及其......
  • Maven工程下:alibaba fastjson2的各种序列化:java对象转json对象、json对象转java对象
    pom文件导入fastjson2坐标:<dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.51</version></dependency>UserVO对象:@Data@AllArgsConstructor......
  • java比较json对象是否相等
    一、需求需要对比这2个json字符串是否完全一样(不用管顺序)1Stringdui="{\"adGroupVO\":{\"campaignId\":\"CAMPAIGN201912101000004559\",\"adGroupChannel\":{\"channelType\":\"SMS\",\"resourceCode\&......
  • [NodeJS] Streams流式数据处理
    在现代应用开发中,数据处理的效率和资源管理尤为重要。NodeJS作为一种高效的JavaScript运行时环境,通过其强大的流(Stream)功能,提供了处理大规模数据的便捷方式。流式数据处理不仅能够优化内存使用,还可以提高数据处理的实时性和效率。下文将介绍NodeJS中的流概念、流的类型以及如何利......
  • 获取Echarts的geoJson文件(省市/区县)
    1.获取市的级别直接使用阿里云提供的工具直接获取: https://datav.aliyun.com/portal/school/atlas/area_selector#&lat=32.62087018318113&lng=118.43261718749999&zoom=4和 https://map.easyv.cloud/和 https://geojson.hxkj.vip/  2.获取县和区的细到街道的geoJson,需......