JS 计算两个日期之间的月份,不足一个月按一个月计算(求大神指点)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS 计算两个日期之间的月份,不足一个月按一个月计算(求大神指点)相关的知识,希望对你有一定的参考价值。

例如:2018-8-16和2018-9-16 计算出来应该是一个月,2018-8-16和2018-9-17,计算出来应该是两个月

参考技术A function getAge(birthday)
function MyDateObj(t)
return
nowY: parseInt(t.getFullYear()),
nowM: parseInt(t.getMonth()) + 1,
nowD: parseInt(t.getDate())
;

var now = MyDateObj(new Date());
var br = MyDateObj(birthday);

var y = now.nowY - br.nowY;
var m = now.nowM - br.nowM;
// 过滤虚岁
if (now.nowM - br.nowM < 0 || (now.nowM - br.nowM == 0 && now.nowD - br.nowD < 0))
y--;
m=m+12;

console.log("计算出来的年", y);
// 大于一岁
if (y > 0)
return y + "岁";

// 输出月
if (m < 0)
m + 12;

console.log("计算出来的月", m);
if (now.nowD - br.nowD < 0)
m--;

if (m > 0)
return m + "月";

// 输出天
var d = (new Date(`$now.nowY/$now.nowM/$now.nowD`).getTime()
- birthday.getTime()) / 1000 / 60 / 60 / 24;
return d + "天";

getAge(new Date('2020/07/31'));
————————————————
版权声明:本文为CSDN博主「u011010407」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

今天新鲜出炉的
参考技术B 系统是按照时间定时计算的,只要超过了设定时间就会加一,哪怕是超过一分钟都会这样的追问

哥,你确定看懂题目了???确定知道JS这玩意儿??????

追答

你这是时间继电器

js如何计算两个日期的月份差?

如何通过JS计算两个日期相差天数(月份同理):var s1 = "2007-01-01".replace(/-/g, "/");
var s2 = "2007-12-31".replace(/-/g, "/");
d1 = new Date(s1);
d2 = new Date(s2);

var time= d2.getTime() - d1.getTime();
var days = parseInt(time / (1000 * 60 * 60 * 24));

alert("相差天数: " + days); JS计算两个时间之间的月份差: //本代码经过我自己的测试没问题
//注意 d_start、和d_end是Date对象
//d_start可以这样创建:Date d_start = new Date(2010,03,31);
//d_end可以这样创建:Date d_start = new Date(2010,04,1);
//startTmp、endTmp是数组对象 解决日期是XXXX年XX月31日是所遇见的问题(如2010-03-31被java script看成//是2010-04-01,我发现xxxx-xx-31在java script中它的毫秒值和它的下一个月的第一天一样)
//那么对应的startTmp的值为[2010,3,31],endTmp[2010,4,1]
//
注意后面有个简单的方法,并且我解释了上面的问题出现的原因
//
function diffDay(d_start, d_end, startTmp, endTmp)
var confict_day = 0;
var y_startIsLeap = false;
var y_start = d_start.getYear();
var y_end = d_end.getYear();
var m_start = startTmp[1];
var m_end = endTmp[1];
//judge whether year is run year eg 2000
if(isLeapYear(y_start))
y_startIsLeap = true;

//judge whether same year
if(y_start!=y_end)
confict_day ++;
else
if(m_start==m_end)
confict_day ++;

if(m_start==1&&m_end==2)
if(y_startIsLeap)
confict_day+=3;
else
confict_day+=4;


if(m_start==2&&m_end==3)
if(y_startIsLeap)//start is leap year
confict_day --;
else
confict_day -=2;


if(is31DayMonth(m_start)&&is30DayMonth(m_end))
confict_day =2;


var tmp = (d_end.getTime()-d_start.getTime())/24/60/60/1000;
tmp +=confict_day;
return tmp;


function isLeapYear(year)
var flag = false;
year+=1900;
if((year%400==0)||(year%4==0&&year%100!=0))
flag = true;

return flag;


function is30DayMonth(month)
var tmp = [4,6,9,11];
month = month-0;
var flag = false;
for(var i=0; i<tmp.length; i++)
if(month==tmp[i])
flag = true;
break;


return flag;


function is31DayMonth(month)
var tmp = [1,3,5,7,8,10,12];
var flag = false;
month = month-0;
for(var i=0; i<tmp.length; i++)
if(month==tmp[i])
flag = true;
break;


return flag;


function isFebMonth(month)
month = month-0;
var flag = false;
if(month==2)
flag = true;

return flag;


function isLastDay(year, month, date)
var flag = false;
if(date==30&&is30DayMonth(month))
flag = true;
else if(date==31&&is31DayMonth(month))
flag = true;
else if(isFebMonth(month))
if(isLeapYear(year)&&date==29)
flag = true;
else if(!isLeapYear(year)&&date==28)
flag = true;


return flag;


javascript的API发现在js中月份的范围是0-11即从0开始(0表示一月份),所以也就会出现我前面说的2010-03-31被js看成是2010-04-01,其实是这么回事:2010-03-31在js中表示的时间是2010年4月31日而不是2010-3-31,我们知道4月份是没有31日的,所以js会默认地帮你向后移一天也即2010-4-1(注意这里表示的时间是2010年5月1日)
因此我们只要在原来的月份上减去一,然后通过getTime()获取毫秒数,并两者相减,再除以一天的毫秒数即得到所谓的相隔天数!!!
EG:
var start = $("#startDate").val();
var end = $("#endDate").val();
var reason =$("#reason").val();
var days = $("#leaveDays").val();
if(!start.match(new RegExp('^[0-9]+-[0-9]+-[0-9]+.*$')))
alert("Please choosh the start date!");
return;

if(!end.match(new RegExp('^[0-9]+-[0-9]+-[0-9]+.*$')))
alert("Please choosh the end date!");
return;

if(reason=='')
alert("Please input reason!");
return;

var startTmp = start.split("-");
var endTmp = end.split("-");
var dS = new Date(startTmp[0],startTmp[1]-1,startTmp[2]);//注意这里减除一
var dE = new Date(endTmp[0],endTmp[1]-1,endTmp[2]);//注意这里减除一
var nowDate = new Date();
var nowTmp = new Date(nowDate.getYear()+1900,nowDate.getMonth(),nowDate.getDate());
if((nowTmp-dS)>0)
alert("Start date can't early today!");
return;

var distance = (dE-dS)/86400000;
distance++;
这样就可以了,不用向上面的这么复杂
核心就在上面的时间月份是从1月开始的(与js默认的月份从0开始不一致!!!)
参考资料: http://www.qnr.cn/pc/erji/JAVA/jiqiao/200911/244838.html http://js.alixixi.com/a/20090228703.shtml http://blog.csdn.net/luoduyu/archive/2007/07/27/1711409.aspx
参考技术A //两个日期
var date1 = '2013-03-26';
var date2 = '2011-01-10';
// 拆分年月日
date1 = date1.split('-');
// 得到月数
date1 = parseInt(date1[0]) * 12 + parseInt(date1[1]);
// 拆分年月日
date2 = date2.split('-');
// 得到月数
date2 = parseInt(date2[0]) * 12 + parseInt(date2[1]);
var m = Math.abs(date1 - date2);
alert(m);

以上是关于JS 计算两个日期之间的月份,不足一个月按一个月计算(求大神指点)的主要内容,如果未能解决你的问题,请参考以下文章

js计算两个月份之间的天数差。

获取两个日期之间的所有月份

js 怎么求两个日期相差几个月零几天?

js计算两个日期间的所有日期

求JS两个日期之间的月份数

计算月份差工具类