<p><input name="txttest" type="text" /></p>
<p><input name="txttmp" type="text" /></p>
<script type="text/javascript">
//日期相加减
DateAdd = function(interval,number,date){
var tmpdate=date;
if(typeof(number)=="string") number=parseInt(number,10);
    switch(interval.toLowerCase()){
        case "y": return new Date(tmpdate.setFullYear(tmpdate.getFullYear()+number));
        case "m": return new Date(tmpdate.setMonth(tmpdate.getMonth()+number));
        case "d": return new Date(tmpdate.setDate(tmpdate.getDate()+number));
        case "w": return new Date(tmpdate.setDate(tmpdate.getDate()+7*number));
        case "h": return new Date(tmpdate.setHours(tmpdate.getHours()+number));
        case "n": return new Date(tmpdate.setMinutes(tmpdate.getMinutes()+number));
        case "s": return new Date(tmpdate.setSeconds(tmpdate.getSeconds()+number));
        case "l": return new Date(tmpdate.setMilliseconds(tmpdate.getMilliseconds()+number));
    } 
}
var myd1=new Date();
var myd2=DateAdd("m","1",myd1);
document.all.txttest.value=myd1.toLocaleDateString();
document.all.txttmp.value=myd2.toLocaleDateString();
</script>请各位达人们指教,为什么myd1的值也跟着变成和myd2一样了。

解决方案 »

  1.   

    <script type="text/javascript">
    //日期相加减
    DateAdd = function(interval,number,date){
    var tmpdate=new Date(date); if(typeof(number)=="string") number=parseInt(number,10);
    switch(interval.toLowerCase()){
    case "y": return new Date(tmpdate.setFullYear(tmpdate.getFullYear()+number));
    case "m": return new Date(tmpdate.setMonth(tmpdate.getMonth()+number));
    case "d": return new Date(tmpdate.setDate(tmpdate.getDate()+number));
    case "w": return new Date(tmpdate.setDate(tmpdate.getDate()+7*number));
    case "h": return new Date(tmpdate.setHours(tmpdate.getHours()+number));
    case "n": return new Date(tmpdate.setMinutes(tmpdate.getMinutes()+number));
    case "s": return new Date(tmpdate.setSeconds(tmpdate.getSeconds()+number));
    case "l": return new Date(tmpdate.setMilliseconds(tmpdate.getMilliseconds()+number));
    }  
    }
    var myd1=new Date();
    var myd2=DateAdd("m","1",myd1);
    document.write(myd1.toLocaleDateString());
    document.write(myd2.toLocaleDateString());
    </script>红色那句 这样 就不会变了 我想可能是tmpdate 和 date 同时引用的是一个内存 修改一个 另一个也改了的原因吧 
      

  2.   

    NND,想不到还是这样的问题。
    开始时有考虑这个因素,网上代码是没有
    var tmpdate=date;这句的,直接对参数date操作,发现问题后,加了这句,想不到还是没解决问题,百思不得其解。
    没想到临时变量的定义方式也存在很大的不同啊。