在线等!百分结.给定一个日期,怎么算出其他年份相应月份的日期

时间:2022-08-30 14:04:06
现在有一个文本框可以输入一个日期(1到31),输入后改变另一个已经存在一个具体的日期的值(如:2006-09-01).如果输入的日期数,在另一个文本框框的月份里没有这个日期,就取这个文本框所在月份的最后一天.如第一个文本框输入31,在第二个文本框的值变为2009-09-30

谢谢!等着救命呢~~

13 个解决方案

#1


没看懂意思。

#2


哈哈,飞MM..

#3


我也没看明白~~~


但是帮顶

#4


<script language="javascript" type="text/javascript">

function fillit()
{
var t1 = document.getElementById("t1");
var reg = /-/g;
var tpl = t1.value.replace(reg,'');
var year = parseInt(tpl.substr(0, 4), 10);
var month = parseInt(tpl.substr(4, 2), 10);
var date = parseInt(tpl.substr(6, 2), 10);
var ds = parseInt(document.getElementById("t2").value, 10);
var nd = new Date(year, month, date+ds);
document.getElementById("t3").value = nd.getYear()+'-'+nd.getMonth()+'-'+nd.getDate();
}

</script>
</HEAD>

<BODY>
<INPUT TYPE="text" NAME="t1" id="t1" value="2006-09-01">
<INPUT TYPE="text" NAME="t2" id="t2" value="" onblur="fillit();return true;" onclick="//fillit();">
<INPUT TYPE="text" NAME="t3" id="t3">
</BODY>
</HTML>

#5


没看明白~~~ 顶
 请清楚一点。。。。。。。

#6


<script language="javascript" type="text/javascript">

function fillit(obj)
{
var t1 = document.getElementById("t1");
var reg = /-/g;
var tpl = t1.value.replace(reg,'');
var year = parseInt(tpl.substr(0, 4), 10);
var month = parseInt(tpl.substr(4, 2), 10);
var date = parseInt(tpl.substr(6, 2), 10);
var ds = parseInt(document.getElementById("t2").value, 10);
var nd = new Date(year, month, date+ds);
document.getElementById("t3").value = nd.getYear()+'-'+nd.getMonth()+'-'+nd.getDate();
if (obj.value=='')
{ document.getElementById("t3").value = ''; }
}

</script>
</HEAD>

<BODY>
<INPUT TYPE="text" NAME="t1" id="t1" value="2006-09-01">
<INPUT TYPE="text" NAME="t2" id="t2" value="请在这输入你的天数!!" onkeyup="fillit(this);return true;" onclick="this.value='';return true;">
<INPUT TYPE="text" NAME="t3" id="t3">
</BODY>
</HTML>

#7


看了下好像还是没有完全满足楼主的要求,
/*如第一个文本框输入31,在第二个文本框的值变为2009-09-30*/
这一需求,楼主可以自行判断,再取得最后的月末日期.

#8


根据楼主的意思,把lantersen(蓝水仁--倍感秋凉!~) 的修改了一下,看看是否是这个效果~

test.htm
---------------------------------

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
<script language="javascript" type="text/javascript">


function fillit(obj)
{
var t1 = document.getElementById("t1");
var reg = /-/g;
var tpl = t1.value.replace(reg,'');
var year = parseInt(tpl.substr(0, 4), 10);
var month = parseInt(tpl.substr(4, 2), 10);
var date = parseInt(tpl.substr(6, 2), 10);
var ds = parseInt(document.getElementById("t2").value, 10);
ds = getday(month,ds);
var nd = new Date(year, month-1, ds);
t1.value = nd.format('yyyy-MM-dd');
}

//根据月份返回每月最大的天数,输入参数应为数值型
function getday(month,day)
{
var myLi = {
month : [",1,3,5,7,8,10,12,", ",2,", ",4,6,9,11," ],
maxDay : [ 31, 28, 30 ]
};

for (i = 0; i < myLi["month"].length; i++) {
if (myLi["month"][i].indexOf(","+month+",") >= 0){
if (day>myLi["maxDay"][i])
{
return (myLi["maxDay"][i]);

else {
return day; 
}
};
}

}

//日期格式化,如"yy-MM-dd"格式
Date.prototype.format = function(format)
{
var o = {
"M+" : this.getMonth()+1, //month
"d+" : this.getDate(),    //day
"h+" : this.getHours(),   //hour
"m+" : this.getMinutes(), //minute
"s+" : this.getSeconds(), //second
"q+" : Math.floor((this.getMonth()+3)/3),  //quarter
"S" : this.getMilliseconds() //millisecond
}
if (/(y+)/.test(format)) 
format=format.replace(RegExp.$1,(this.getFullYear()+"").substr(4 - RegExp.$1.length));
for(var k in o)
if(new RegExp("("+ k +")").test(format))
format = format.replace(RegExp.$1,RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));
return format;
}
</script>
</HEAD>

<BODY>
<INPUT TYPE="text" NAME="t1" id="t1" value="2006-09-01">
<INPUT TYPE="text" NAME="t2" id="t2" value="请在这输入你的天数!!" onkeyup="fillit(this);return true;" onclick="this.value='';return true;">
</BODY>
</HTML>

#9


迷糊^混乱...

#10


up

#11


时间是可以直接进行加减的:

<script>
var str = "2006-09-01";
var dt1 = new Date(str.substring(0, 4), str.substring(6, 7) - 1, str.substring(9, 10))
var n = 31
var dt2 = new Date(dt1.getTime() + (n - 1) * 24 * 60 * 60 * 1000);
alert(dt2.toLocaleString());
</script>

不过搂主需要小心的是,getMonth 的月份 0 表示"1月",1 表示"2月"

#12


理解搂主的需求有误

#13


代码为:

<script>

// 先按指定天数进行相加
var str = "2006-09-01";
var n   = 31

var dt1 = new Date(str.substring(0, 4), str.substring(6, 7) - 1, str.substring(9, 10))
var dt2 = new Date(dt1.getTime() + (n - 1)* 24 * 60 * 60 * 1000);

// 检测月份如果变化变化
if(dt1.getMonth() != dt2.getMonth())
{
        // 设定为1号
        dt2.setDate(1);

        // 往回减去1天
        dt2 = new Date(dt2.getTime() - 24 * 60 * 60 * 1000);
}

// 输出结果
alert(dt2.toLocaleString());

</script>

#1


没看懂意思。

#2


哈哈,飞MM..

#3


我也没看明白~~~


但是帮顶

#4


<script language="javascript" type="text/javascript">

function fillit()
{
var t1 = document.getElementById("t1");
var reg = /-/g;
var tpl = t1.value.replace(reg,'');
var year = parseInt(tpl.substr(0, 4), 10);
var month = parseInt(tpl.substr(4, 2), 10);
var date = parseInt(tpl.substr(6, 2), 10);
var ds = parseInt(document.getElementById("t2").value, 10);
var nd = new Date(year, month, date+ds);
document.getElementById("t3").value = nd.getYear()+'-'+nd.getMonth()+'-'+nd.getDate();
}

</script>
</HEAD>

<BODY>
<INPUT TYPE="text" NAME="t1" id="t1" value="2006-09-01">
<INPUT TYPE="text" NAME="t2" id="t2" value="" onblur="fillit();return true;" onclick="//fillit();">
<INPUT TYPE="text" NAME="t3" id="t3">
</BODY>
</HTML>

#5


没看明白~~~ 顶
 请清楚一点。。。。。。。

#6


<script language="javascript" type="text/javascript">

function fillit(obj)
{
var t1 = document.getElementById("t1");
var reg = /-/g;
var tpl = t1.value.replace(reg,'');
var year = parseInt(tpl.substr(0, 4), 10);
var month = parseInt(tpl.substr(4, 2), 10);
var date = parseInt(tpl.substr(6, 2), 10);
var ds = parseInt(document.getElementById("t2").value, 10);
var nd = new Date(year, month, date+ds);
document.getElementById("t3").value = nd.getYear()+'-'+nd.getMonth()+'-'+nd.getDate();
if (obj.value=='')
{ document.getElementById("t3").value = ''; }
}

</script>
</HEAD>

<BODY>
<INPUT TYPE="text" NAME="t1" id="t1" value="2006-09-01">
<INPUT TYPE="text" NAME="t2" id="t2" value="请在这输入你的天数!!" onkeyup="fillit(this);return true;" onclick="this.value='';return true;">
<INPUT TYPE="text" NAME="t3" id="t3">
</BODY>
</HTML>

#7


看了下好像还是没有完全满足楼主的要求,
/*如第一个文本框输入31,在第二个文本框的值变为2009-09-30*/
这一需求,楼主可以自行判断,再取得最后的月末日期.

#8


根据楼主的意思,把lantersen(蓝水仁--倍感秋凉!~) 的修改了一下,看看是否是这个效果~

test.htm
---------------------------------

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
<script language="javascript" type="text/javascript">


function fillit(obj)
{
var t1 = document.getElementById("t1");
var reg = /-/g;
var tpl = t1.value.replace(reg,'');
var year = parseInt(tpl.substr(0, 4), 10);
var month = parseInt(tpl.substr(4, 2), 10);
var date = parseInt(tpl.substr(6, 2), 10);
var ds = parseInt(document.getElementById("t2").value, 10);
ds = getday(month,ds);
var nd = new Date(year, month-1, ds);
t1.value = nd.format('yyyy-MM-dd');
}

//根据月份返回每月最大的天数,输入参数应为数值型
function getday(month,day)
{
var myLi = {
month : [",1,3,5,7,8,10,12,", ",2,", ",4,6,9,11," ],
maxDay : [ 31, 28, 30 ]
};

for (i = 0; i < myLi["month"].length; i++) {
if (myLi["month"][i].indexOf(","+month+",") >= 0){
if (day>myLi["maxDay"][i])
{
return (myLi["maxDay"][i]);

else {
return day; 
}
};
}

}

//日期格式化,如"yy-MM-dd"格式
Date.prototype.format = function(format)
{
var o = {
"M+" : this.getMonth()+1, //month
"d+" : this.getDate(),    //day
"h+" : this.getHours(),   //hour
"m+" : this.getMinutes(), //minute
"s+" : this.getSeconds(), //second
"q+" : Math.floor((this.getMonth()+3)/3),  //quarter
"S" : this.getMilliseconds() //millisecond
}
if (/(y+)/.test(format)) 
format=format.replace(RegExp.$1,(this.getFullYear()+"").substr(4 - RegExp.$1.length));
for(var k in o)
if(new RegExp("("+ k +")").test(format))
format = format.replace(RegExp.$1,RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));
return format;
}
</script>
</HEAD>

<BODY>
<INPUT TYPE="text" NAME="t1" id="t1" value="2006-09-01">
<INPUT TYPE="text" NAME="t2" id="t2" value="请在这输入你的天数!!" onkeyup="fillit(this);return true;" onclick="this.value='';return true;">
</BODY>
</HTML>

#9


迷糊^混乱...

#10


up

#11


时间是可以直接进行加减的:

<script>
var str = "2006-09-01";
var dt1 = new Date(str.substring(0, 4), str.substring(6, 7) - 1, str.substring(9, 10))
var n = 31
var dt2 = new Date(dt1.getTime() + (n - 1) * 24 * 60 * 60 * 1000);
alert(dt2.toLocaleString());
</script>

不过搂主需要小心的是,getMonth 的月份 0 表示"1月",1 表示"2月"

#12


理解搂主的需求有误

#13


代码为:

<script>

// 先按指定天数进行相加
var str = "2006-09-01";
var n   = 31

var dt1 = new Date(str.substring(0, 4), str.substring(6, 7) - 1, str.substring(9, 10))
var dt2 = new Date(dt1.getTime() + (n - 1)* 24 * 60 * 60 * 1000);

// 检测月份如果变化变化
if(dt1.getMonth() != dt2.getMonth())
{
        // 设定为1号
        dt2.setDate(1);

        // 往回减去1天
        dt2 = new Date(dt2.getTime() - 24 * 60 * 60 * 1000);
}

// 输出结果
alert(dt2.toLocaleString());

</script>