javascript 现在有个需求就两个日期 求出这两个日期相差几个月零多少天

javascript 现在有个需求就两个日期 求出这两个日期相差几个月零多少天,第1张

楼上的不对,帮你写出来吧。

var startDay = [2012, 1, 12], endDay = [2013, 5, 27];

var startDate = new Date();

startDatesetFullYear(startDay[0], startDay[1] - 1, startDay[2]); //js中0代表1月,因此这里1月要减去1

var endDate = new Date();

endDatesetFullYear(endDay[0], endDay[1] - 1, endDay[2]);

var offsetMonth = 0;

if (endDay[2] < startDay[2]) offsetMonth = 1; //如1月30号和2月1号比较,天数差不足一月时需要特别的处理

endDatesetFullYear(endDay[0], endDay[1] - 1 - offsetMonth, endDay[2]);

var offsetYear = 0;

if (endDay[1] < startDay[1]) offsetYear = 1; //同理,处理不足1年的情况

var month = (endDategetYear() - startDategetYear() - offsetYear)  12 + endDategetMonth() - startDategetMonth() + offsetYear  12;

var day = endDategetDate() - startDategetDate();

if (offsetMonth) {

    endDatesetDate(0);

    day += endDategetDate();

}

var final = '';

if (month) final+= monthtoString() + '月';

if (day) final+= daytoString() + '天';

if (finallength) final = '相差' + final;

alert(final);

<SCRIPT LANGUAGE="JavaScript">

<!--

function deal(){

//var Y = 6;

//var R ="2009-11-01";

var R = documentgetElementById('date')value +'';

var Y = documentgetElementById('month')value;

alert(R);

var year=Rsubstr(0,4);

var month=Rsubstr(5,2);

var day=Rsubstr(8,2);

if((parseInt(month)+parseInt(Y)) > 12){

year++;

month = parseInt(month) + parseInt(Y) - 12;

}else{

month = parseInt(month) + parseInt(Y);

}

alert(year+"-"+month+"-"+day);

R = new Date(year,month,day,00,00,00);

dateNow = new Date();

var diff = RgetTime() - dateNowgetTime()

var days = Mathfloor(diff/(1000606024));

var str = "与今天相差" + days + "天"

if(R > dateNow){

alert("大于今天!"+"\n"+str);

}else{

alert("小于今天!"+"\n"+str);

}

}

//-->

</SCRIPT>

月<input type="text" id="month" value="6">

日期 <input type="text" id="date" value="2009-11-01">

<input type="button" value="submit" onClick="deal()">

这样的吗

如何通过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= d2getTime() - d1getTime();

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_startgetYear();

var y_end = d_endgetYear();

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_endgetTime()-d_startgetTime())/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<tmplength; 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<tmplength; 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(!startmatch(new RegExp('^[0-9]+-[0-9]+-[0-9]+$'))){

alert("Please choosh the start date!");

return;

}

if(!endmatch(new RegExp('^[0-9]+-[0-9]+-[0-9]+$'))){

alert("Please choosh the end date!");

return;

}

if(reason==''){

alert("Please input reason!");

return;

}

var startTmp = startsplit("-");

var endTmp = endsplit("-");

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(nowDategetYear()+1900,nowDategetMonth(),nowDategetDate());

if((nowTmp-dS)>0){

alert("Start date can't early today!");

return;

}

var distance = (dE-dS)/86400000;

distance++;

这样就可以了,不用向上面的这么复杂

核心就在上面的时间月份是从1月开始的(与js默认的月份从0开始不一致!!!)

参考资料:

>

参考原文链接: >

<script>

function show(){

    var menu1=documentmyformmenu1;

    var menu2=documentmyformmenu2;

    var menu3=documentmyformmenu3;

    var g=menu1options[menu1selectedIndex]value;

    var e=menu2options[menu2selectedIndex]value;

    var a=menu3options[menu3selectedIndex]value;

    var today=new Date();

    var his=new Date(g+","+e+","+a);

    var diff=todaygetTime()-hisgetTime();

    consolelog(diff);

    documentmyformtext1value=Mathfloor(diff/(1000606024));

}

</script>

<form name="myform">

<select name="menu1">

<option name="bg" value="11">2011</option>

<option name="bg" value="96">1996</option>

</select>

<select name="menu2">

<option name="bg" value="1">1</option>

<option name="bg" value="11">11</option>

</select>

<select name="menu3">

<option name="bg" value="12">12</option>

<option name="bg" value="23">23</option>

</select>

<input type="text" id="text1" name="text1" readonly="readonly">

<input type="button" onclick="show()" value="click">

</form>

照着图敲一遍代码好累,要是直接发代码,复制粘贴多好。

假设你可以得到两个日期的 年,月,日(下面以 2011716 和 2011720为例)

// Javascript 中的月份从零开始

// 8月要写成7, 7月要写成6,1月要写成0。。。

var day1 = (new Date)setFullYear(2011, 7, 16);

var day2 = (new Date)setFullYear(2011, 7, 20);

var number_of_days = (day2 - day1) / 86400000;

// 输出 4

alert(number_of_days);

// 将值赋予 input

documentgetElementById('days')value = number_of_days;

不太清楚你的程序具体是怎么运作,但大概方法就是这样。

// 给日期类对象添加日期差方法,返回日期与diff参数日期的时间差,单位为天

Dateprototypediff = function(date){

return (thisgetTime() - dategetTime())/(24 60 60 1000);

}

// 构造两个日期,分别是系统时间和2013/04/08 12:43:45

var now = new Date();

var date = new Date('2013/04/08 12:43:45');

// 调用日期差方法,求得参数日期与系统时间相差的天数

var diff = nowdiff(date);

// 打印日期差

alert(diff);

alert(Mathabs(new Date('2012-06-01 00:00:00'replace(/-/g,'/')) - new Date())/(1000606024))

以上就是关于javascript 现在有个需求就两个日期 求出这两个日期相差几个月零多少天全部的内容,包括:javascript 现在有个需求就两个日期 求出这两个日期相差几个月零多少天、JS通过一个值与日期比较计算天数、js如何计算两个日期的月份差等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10155612.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存