JS Jquery 根据两个日期计算相差月数天数 兼容二月份28天29天_jquery计算两个日期之间的月份_从删库到跑路养成记的博客-程序员秘密

技术标签: jQuery  js  javascript  jquery  

var start_date = '2019-08-21';
var end_date = '2020-09-29';
用法:
var month_day = getMonthAndDay(new Date(start_date), new Date(end_date));
返回:{month:13,day:9}


function getMonthAndDay(startdate, enddate) {
    if (startdate.valueOf() > enddate.valueOf()) {
        var tmpdt = enddate;
        enddate = startdate;
        startdate = tmpdt;
    }
    var month = 0;
    var day = 0;
    enddate = getNextDay(enddate);
    if (enddate.getTime() >= startdate.getTime()) {
        month = (enddate.getFullYear() - startdate.getFullYear()) * 12 + enddate.getMonth() - startdate.getMonth();
        day = enddate.getDate() - startdate.getDate();
        if(day < 0){
            var lastmonthdaynum = getlastmonthDay(enddate);
            day += lastmonthdaynum;
            if(lastmonthdaynum < 30 && startdate.getDate() > 28){
                day += startdate.getDate() - lastmonthdaynum - 1;
            }
            month--;
        }
    } else {
        if (startdate.getTime() == getlastDay(startdate)) {
            if (enddate.getTime() == getlastDay(enddate)) {
                month = enddate.getFullYear() - startdate.getFullYear() * 12 + enddate.getMonth() - startdate.getMonth();
                day = 0;
            } else {
                month = enddate.getFullYear() - startdate.getFullYear() * 12 + enddate.getMonth() - startdate.getMonth() - 1;
                day = startdate.getDate();
            }
        } else {
            if (enddate.getTime() == getlastDay(enddate)) {
                month = enddate.getFullYear() - startdate.getFullYear() * 12 + enddate.getMonth() - startdate.getMonth();
                day = 0;
            } else {
                month = enddate.getFullYear() - startdate.getFullYear() * 12 + enddate.getMonth() - startdate.getMonth() - 1;
                var lastmonthday = getlastmonthDay(enddate);
                day = lastmonthday - startdate.getDate() + enddate.getDate();
            }
         }
    }
    return {"month" : month,"day" : day};
}
//得到上一个月有多少天
function getlastmonthDay(date) {
    date.setDate(1);
    date.setDate(date.getDate() - 1);
    return date.getDate();
}
/获取指定日期的后一天日期
function getNextDay(d){
    d = new Date(d);
    d = +d + 1000*60*60*24;
    d = new Date(d);
    var res = d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate();
    return new Date(res);
}
//获取 date 所在的月有多少天
function getlastDay(date) {
    date.setMonth(date.getMonth() + 1);
    date.setDate(1);
    date.setDate(date.getDate() - 1);
    return date.getDate();
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/muziduoxi/article/details/108873649

智能推荐

神经机器翻译(Neural Machine Translation)系列教程 - (九)自己动手-搭建-神经机器翻译 -- nematus神经机器翻译_豪横我洋的博客-程序员秘密

一、简介nematus是英国爱丁堡大学自然语言处理小组基于theano开发的一套开源的神经机器翻译系统,无论在学术界还是产业界都有一定影响力。实验室网址:http://edinburghnlp.inf.ed.ac.uk/项目地址:https://github.com/EdinburghNLP/nematus二、系统环境64位ubuntu 16.04Python:

tomcat 启动异常 The web application [ROOT] registered the JDBC driver [xxx] but failed to unregister it_dearfulan的博客-程序员秘密

tomcat启动的时候出现如下异常:22-Feb-2021 20:25:30.697 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file22-Feb-2021 20:2

嵌入式软件开发之------浅析 fork()函数(十二)_surquer的博客-程序员秘密

linux代码版本:linux4.4glibc代码版本:glibc-2.26导读:在linux内核态也搞了好几年了,公司的新平台也都转向了用户态,发展趋势也是linux的工作量也来越少,更多的工作也将聚焦在业务上。其实无论是在内核态还是用户态编程,对于嵌入式编程来说,没有本质区别,嵌入式产品上也不太会去做数据库等之类的应用,大多还是基于设备文件操作、进程通信、socket等实现业务逻辑。在...

在 Boolan 网开讲《Linux 网络编程实战》课程_陈硕的博客-程序员秘密

《网络编程实战》是一门以讲解实例为主的课程,每一节都讲一两个网络编程的例子程序,课程偏重 Linux 服务端 TCP 网络编程。 本课程要求听课人员已经读过《Unix 网络编程》,能写简单的 TCP echo 服务。   课程地址:http://boolan.com/course/4 配套页面:http://chenshuo.com/pnp

中值滤波 matlab程序实现(一)_中值滤波matlab代码_西兰小花花❀的博客-程序员秘密

中值滤波:基于排序统计理论的一种能有效抑制噪声的非线性平滑滤波信号处理技术。中值滤波的特点即是首先确定一个以某个像素为中心点的邻域,一般为方形邻域,也可以为圆形、十字形等等,然后将邻域中各像素的灰度值排序,取其中间值作为中心像素灰度的新值,这里领域被称为窗口,当窗口移动时,利用中值滤波可以对图像进行平滑处理。其算法简单,时间复杂度低,但其对点、线和尖顶多的图像不宜采用中值滤波。很容易自适应化。中值...

hibernate如何使用hql语句查询时间区间段_hql 时间局域_Clannad_汐的博客-程序员秘密

1、写出类似于 以下的hql语句 [java] view plain copyhql = "from TeacherAward where awardState = 2  and  awardTime >= ? and awardTime ;  2、查询时的操作语句为:[java] view plain cop

随便推点

python excel 页面设置 一页宽_excel宽页面打印页面设置_weixin_39943370的博客-程序员秘密

在excel的打印中,由于内容太多了,导致太宽了,打印不全,这时候我们该怎么办呢,下面让学习啦小编为你带来excel 宽页面打印页面设置的方法。excel 宽页面打印页面设置步骤:1)使用页面设置—页面—页边距,将页边距放宽,以适应稍微比一页A4纸大一些的EXCEL的表格2)选定整个表格,缩小所有选用的字体,从而小心整个表格,看看能否缩小到一页的A4纸上(同时可以调节页边距)3)使用页面设置—页面...

深入剖析数据库内核之事务的本质 | 附下一代分布式数据库 OceanBase 解决方案_OceanBase数据库官方博客的博客-程序员秘密

颜然,OceanBase 分布式数据库事务研发负责人OceanBase 初创成员之一,目前负责事务引擎、高可用架构、负载均衡、性能优化等方面的工作。引言众所周知,事务特性是数据库中重要的功能,是保证数据一致性的关键。在近日OceanBase 开源技术直播上,OceanBase 分布式数据库事务研发负责人颜然以数据库事务的本质为主题,深入分享了事务的前世今生一季 OceanBase 在分布式事务上的解决方案。本文将从以下三方面进行阐述数据库事务:一、事务的前世二、事务的挑战三、分布式事务.

BZOJ1043: [HAOI2008]下落的圆盘_L_0_Forever_LF的博客-程序员秘密

求红线总长可以用每个圆的周长减去被覆盖的部分 对每个圆i,枚举j&amp;gt;ij&amp;gt;ij&gt;i计算圆j覆盖了圆i的长度 若i和j相离/相切或i包含j不考虑 若i被j包含就被完全覆盖 否则是相交的情况如图 圆A和圆B交与C,D,可以算出AE,CE的长度,用余弦定理可以算得cosCAE,用acos,atan2可以算得A被覆盖的一个弧度区间,把所有覆盖的区间求出来后就变成了一个区间覆盖问题...

gluon.utils.split_and_load进行多gpu训练碰到的小问题MXNetError: Check failed: (*begin < *end): Invalid begin, en_sinat_24395003的博客-程序员秘密

import numpy as npfrom mxnet import gluon,npx,nddata = np.arange(15).reshape(3, 5)dataloader = gluon.data.DataLoader(data, batch_size=2, shuffle=False, last_batch='keep')devices = [npx.gpu(0), npx.gpu(1)]for da.

VS2019中,解决“错误CS0006:未能找到元数据文件”_cs0006 未能找到元数据文件_爱拆电脑的小白的博客-程序员秘密

VS2019中,解决“错误CS0006:未能找到元数据文件”前些日子,用三层架构做小项目时,编译时显示CS0006,无法找到元数据文件。傻傻的我,去根据提示去相应的目录查看,结果发现如下图:这种情况说明没有相应的启动文件,主要是.dll与.pdb文件。**解决方案:**1. 右击解决方案“。。。”,在弹出的对话框中选择【批生成(T)…】,如下图:2. 然后将会弹出以下对话,...

Photoshop二次开发接口介绍_photoshop接口_Greless的博客-程序员秘密

一、Photoshop Plug-In and Connection SDK导出模块导出插件模块旨在从打开的Photoshop文档输出信息。这与导入插件相反。使用示例包括导出到专有设备或显示器,以及导出特定数据(例如路径或资源)。【文件】-【导出】菜单 滤镜模块滤镜插件模块是Photoshop插件模块中最常见的模块。它们允许编辑像素数据,例如特殊图像效果。【滤镜】菜单 拾色器模块拾色器插件模块是从“文件”&gt;“首选项”&gt;“常规”首选项面板中选择的,并允许插件显示其自己的UI,供用户选择颜色