<SCRIPT LANGUAGE="JavaScript">
function getDateByInterval(date,interval)
{
var d1 = new Date(date);
d2 = new Date(d1.getFullYear(),d1.getMonth(),d1.getDate()+parseInt(interval),0,0,0)
return d2.getFullYear()+"年"+(d2.getMonth()+1) + "月"+ d2.getDate()+"日"
}
alert ( getDateByInterval("06/18/2002","13"))
alert ( getDateByInterval("06/18/2002","-18"))
alert ( getDateByInterval("06/18/2002","365"))
</SCRIPT>

解决方案 »

  1.   

    <script>
    function test(oldDate,diffDay)
    {
    //可以加上错误处理
    var a = new Date(oldDate)
    a = a.valueOf()
    a = a - diffDay * 24 * 60 * 60 * 1000
    a = new Date(a)
    alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日")
    }
    test("12/23/2002",2)
    </script>
      

  2.   

    <script>
    function test(oldDate,diffDay)
    {
    //可以加上错误处理
    var a = new Date(oldDate)
    a = a.valueOf()
    a = a - diffDay * 24 * 60 * 60 * 1000
    a = new Date(a)
    alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日")
    }
    test("12/23/2002",2)
    </script>
      

  3.   

    <script>
    function test(oldDate,diffDay)
    {
    //可以加上错误处理
    var a = new Date(oldDate)
    a = a.valueOf()
    a = a - diffDay * 24 * 60 * 60 * 1000
    a = new Date(a)
    alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日")
    }
    test("12/23/2002",2)
    </script>
      

  4.   

    昨天
    <script>
    var d=new Date()
    d.setDate(d.getDate()-1)
    alert(d.toLocaleString())
    </script>前天
    <script>
    var d=new Date()
    d.setDate(d.getDate()-2)
    alert(d.toLocaleString())
    </script>明天
    <script>
    var d=new Date()
    d.setDate(d.getDate()+1)
    alert(d.toLocaleString())
    </script>
      

  5.   

    <SCRIPT>
    function PlusDay(asDate,aiDay){
       var liDate = Date.parse(asDate.replace(/\-/g, '/'));
       var liDay = 3600*1000*24*aiDay;
       var loDate = new Date(liDate+liDay);
       return loDate.getYear() + "-" + (loDate.getMonth()+1) + "-" + loDate.getDate();
    }
    alert(PlusDay("2002-6-18",10))
    </SCRIPT>
      

  6.   

    因为俺刚开始学习js,所以语法不熟悉,只是提供一个算法,而且不知道是否有现成的方法来解决。function fun1()
    {
    date = new Date() ;
    year = date.getYear() ;
    month = date.getMonth()+1 ;
    day= date.getDate() ;switch(month)
    {
    case 1 ,3,5,7,8,10,12 :
    daynum=31;
    break ;
    case 4,6,9,11:
    daynum=30;
    break;
    case 2 :
    if(year%400||year%4)
    daynum=29 ;
    else
    daynum=28 ;
    break ;
    default:
    break ;
    }
    switch(daynum)
    {
    case 31 :
    month-=day1/31;
    day-=day1%31 ;
    break; 
    case 30 :
    month-=day1/30;
    day-=day1%30 ;
    break; 
    case 29:
    month-=day1/29;
    day-=day1%29 ;
    break; 
    case 28 :
    month-=day1/28 ;
    day-=day1%28 ;
    break; 
    }document.write("<br>",year,"/",month,"/",day"/");
    }只是考虑了一年内的运算,可以自己照着推出跨年的运算。俺太懒了,不想写了。
      

  7.   

    请问孟子:
    Date a = new Date() ;
    a.valueOf的值是从某一天开始的毫秒数吗???
      

  8.   

    從emu那里改裝:
    function getDateByInterval(date,interval)
    {
    var d1 = new Date(date);
    d2 = new Date(d1.getTime()+parseInt(interval)*24*3600*1000)
    return d2.getFullYear()+"年"+(d2.getMonth()+1) + "月"+ d2.getDate()+"日"
    }哈哈
      

  9.   

    呵呵秋水的代码就是漂亮。我照着写一个试试:
    <SCRIPT LANGUAGE="JavaScript">
    function getDateByInterval(date,interval)
    {
    var d = new Date(date);
    d.setDate(d.getDate()+parseInt(interval))
    return d.toLocaleString().split(" ")[0]
    }
    alert ( getDateByInterval("06/18/2002","13"))
    alert ( getDateByInterval("06/18/2002","-18"))
    alert ( getDateByInterval("06/18/2002","365"))
    </SCRIPT>
      

  10.   

    减到两行,哈哈~~~~~~~~~~~
    <SCRIPT>
    function PlusDay(asDate,aiDay){
       var loDate = new Date(Date.parse(asDate.replace(/\-/g, '/'))+3600*1000*24*aiDay);
       return loDate.getYear() + "-" + (loDate.getMonth()+1) + "-" + loDate.getDate();
    }
    alert(PlusDay("2002-6-18",-10))
    </SCRIPT>
      

  11.   

    还是 chenzengxi(懒猫) 的好,呵呵
    <SCRIPT>
    function PlusDay(asDate,aiDay){
       return new Date(Date.parse(asDate.replace(/-/g,"/"))+3600*1000*24*aiDay).toLocaleString().split(" ")[0];
    }
    alert(PlusDay("2002-6-18",10))
    </SCRIPT>
      

  12.   

    to wasy:
    呵呵,你改我的,我改秋水的,咱们彼此彼此。
      

  13.   

    minitigger的也不错,同时给我们留了个思考题:如果不用Date自动适应日期的特性,该如何写呢?
      

  14.   

    toLocaleString().split(" ")[0];
    在版本5.5以上,可以直接用toLocaleDateString,如<SCRIPT>
    function PlusDay(asDate,aiDay){
       return new Date(Date.parse(asDate.replace(/-/g,"/"))+3600*1000*24*aiDay).toLocaleDateString();
    }
    alert(PlusDay("2002-6-18",10))
    </SCRIPT>
    请参阅
    toDateString 方法 | toLocaleTimeString 方法
      

  15.   

    要求,不使用Date函数:<script>
    function qswhDate(strDate,intAdd){
    var arr,reg=/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/
    if(arr=strDate.match(reg)){
    arr[1]=Number(arr[1])
    arr[3]=Number(arr[3])
    arr[4]=Number(arr[4])
    arr[4]+=intAdd
    while(arr[4]>getDays(arr[1],arr[3])){
    arr[4]-=getDays(arr[1],arr[3])
    arr[3]+=1
    if(arr[3]>12){
    arr[3]=1
    arr[1]+=1
    }
    }
    return arr[1]+"年"+arr[3]+"月"+arr[4]+"日"
    }else return Error()
    }
    function getDays(year,month){
    switch(month){
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:return 31
    case 4:
    case 6:
    case 9:
    case 11:return 30
    case 2:
    if(year%100)
    if(year%4)return 28
    else return 29
    else 
    if(year%400)return 28
    else return 29
    }
    return month
    }function PlusDay(asDate,aiDay){
       return new Date(Date.parse(asDate.replace(/-/g,"/"))+3600*1000*24*aiDay).toLocaleString().split(" ")[0];
    }alert(qswhDate("2002-5-18",290))
    alert(PlusDay("2002-5-18",290))
    </script>ps.只解决了加的,没解决减的,谁有空补全代码,我去吃饭了,88
      

  16.   

    要求,不使用Date函数:<script>
    function qswhDate(strDate,intAdd){
    var arr,reg=/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/
    if(arr=strDate.match(reg)){
    arr[1]=Number(arr[1])
    arr[3]=Number(arr[3])
    arr[4]=Number(arr[4])
    arr[4]+=intAdd
    while(arr[4]>getDays(arr[1],arr[3])){
    arr[4]-=getDays(arr[1],arr[3])
    arr[3]+=1
    if(arr[3]>12){
    arr[3]=1
    arr[1]+=1
    }
    }
    return arr[1]+"年"+arr[3]+"月"+arr[4]+"日"
    }else return Error()
    }
    function getDays(year,month){
    switch(month){
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:return 31
    case 4:
    case 6:
    case 9:
    case 11:return 30
    case 2:
    if(year%100)
    if(year%4)return 28
    else return 29
    else 
    if(year%400)return 28
    else return 29
    }
    return month
    }function PlusDay(asDate,aiDay){
       return new Date(Date.parse(asDate.replace(/-/g,"/"))+3600*1000*24*aiDay).toLocaleString().split(" ")[0];
    }alert(qswhDate("2002-5-18",290))
    alert(PlusDay("2002-5-18",290))
    </script>ps.只解决了加的,没解决减的,谁有空补全代码,我去吃饭了,88
      

  17.   

    原来是mini-tigger来的啊,我正说这名字怎么这么古怪,以为是拼音呢。
      

  18.   

    什么茴字,小孩不懂,哈哈哈。参差多态性是幸福生活的本源嘛。
    不用Date太烦了,还得判断对月运算跨年,减去的天数超过一年的,挺烦的,不过归结起来还是加switch而已,也就没有再作的兴趣了。
    不过如果大家感兴趣,可以试试再一个swtich中进行所有的处理,这样的代码是最紧凑的。
      

  19.   

    既然没人写,那只好亲自动手了...<script>
    function qswhDate(strDate,intAdd){
    var arr,reg=/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/
    if(arr=strDate.match(reg)){
    /************(qiushuiwuhen 2002-6-18)******************/
    arr[1]=Number(arr[1])
    arr[3]=Number(arr[3])
    if((arr[3]>12)||(arr[3]<1))return Error()
    arr[4]=Number(arr[4])+intAdd
    if(arr[4]>0){
    while(arr[4]>getDays(arr[1],arr[3])){
    arr[4]-=getDays(arr[1],arr[3])
    if(++arr[3]>12){arr[3]=1;arr[1]++;}
    }
    }
    else{
    while(arr[4]<1){
    if(--arr[3]<1){arr[3]=12;arr[1]--;}
    arr[4]+=getDays(arr[1],arr[3]);
    }
    }
    return arr[1]+"年"+arr[3]+"月"+arr[4]+"日"
    }else return Error()
    }
    function getDays(year,month){
    if(month==2)return year%100?(year%4?28:29):(year%400?28:29)
    else return [31,0,31,30,31,30,31,31,30,31,30,31][month-1]
    }function PlusDay(asDate,aiDay){
       return new Date(Date.parse(asDate.replace(/-/g,"/"))+3600*1000*24*aiDay).toLocaleString().split(" ")[0];
    }var sDay="2002-6-18",iAdd=0;
    for(n=0;n<1000;n++)
    if(qswhDate(sDay,iAdd+n)==PlusDay(sDay,iAdd+n))iAdd++;
    alert(iAdd)
    </script>ps.去掉getDays函数中的switch,使代码简化
      

  20.   

    日期减天数的新日期的简单方法:
    thedate = new Date();
    document.write("现在日期:"+thedate.toLocaleString() +"<br>");
    thedate.setDate(-(100-thedate.getDate())); //减100天
    document.write("百日前:"+thedate.toLocaleString() +"<br>");
    thedate = new Date();
    thedate.setDate(100+thedate.getDate());  //加100天
    document.write("百日后:"+thedate.toLocaleString() +"<br>");显示结果:现在日期:2002年6月19日 11:09:12
    百日前:2002年3月11日 11:09:12
    百日后:2002年9月27日 11:09:12
      

  21.   

    顺便问问,这样的计算,
    c/c++或bcb里如何实现?
      

  22.   

    to samoonm(寒月) ,用Date对象,自然简单了
    要求就是不用Date对象,所以才有如此长的代码ps.建议最好先从头看到底
      

  23.   

    to samoonm(寒月) ,用Date对象,自然简单了
    要求就是不用Date对象,所以才有如此长的代码ps.建议最好先从头看到底,我的算法思路可以沿用到c中
      

  24.   

    /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/
    光这一句,我就写不出来。秋水学正则表达式的时候看的什么书呢?
      

  25.   

    怪事:var sDay="2002-6-18",iAdd=0;
    td = new Date()
    for(n=0;n>-1000;n--)
    if(qswhDate(sDay,iAdd+n)==PlusDay(sDay,iAdd+n))iAdd++;
    alert(new Date()-td);
    alert(iAdd)做减法的比加法的快近10倍!怎么可能??
      

  26.   

    因为idd参加了“战斗”所以iAdd+n始终等于0
      

  27.   

    var sDay="2002-6-18",iAdd=0;
    td = new Date()
    for(n=0;n<1000;n++)
    if(qswhDate(sDay,n)==PlusDay(sDay,n))iAdd++;
    alert(new Date()-td);
    alert(iAdd)------------------------------------------var sDay="2002-6-18",iAdd=0;
    td = new Date()
    for(n=0;n>-1000;n--)
    if(qswhDate(sDay,n)==PlusDay(sDay,n))iAdd++;
    alert(new Date()-td);
    alert(iAdd)结果是对的,但是速度还是有明显差异啊
      

  28.   

    加了跨年的运算,优化了点<script>
    function qswhDate(strDate,intAdd){
    /************(qiushuiwuhen 2002-6-19)******************/
    var arr,reg=/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/
    if(arr=strDate.match(reg)){
    arr[1]=Number(arr[1])
    arr[3]=Number(arr[3])
    if((arr[3]>12)||(arr[3]<1))return Error()
    arr[4]=Number(arr[4])+intAdd
    if(arr[4]>0){
    while(arr[4]>getDaysByYear(arr[1],arr[3])){
    arr[4]-=getDaysByYear(arr[1],arr[3])
    arr[1]++;
    }
    while(arr[4]>getDaysByMonth(arr[1],arr[3])){
    arr[4]-=getDaysByMonth(arr[1],arr[3])
    if(++arr[3]>12){arr[3]=1;arr[1]++;}
    }
    }
    else{
    while(arr[4]<-getDaysByYear(arr[1]-1,arr[3])){
    arr[4]+=getDaysByYear(arr[1]-1,arr[3])
    arr[1]--;
    }
    while(arr[4]<1){
    if(--arr[3]<1){arr[3]=12;arr[1]--;}
    arr[4]+=getDaysByMonth(arr[1],arr[3]);
    }
    }
    return arr[1]+"年"+arr[3]+"月"+arr[4]+"日"
    }else return Error()
    }
    function getDaysByYear(year,month){
    if(month>2)year++;
    return year%100?(year%4?365:366):(year%400?365:366)
    }
    function getDaysByMonth(year,month){
    if(month==2)return year%100?(year%4?28:29):(year%400?28:29)
    else return [31,0,31,30,31,30,31,31,30,31,30,31][month-1]
    }function PlusDay(asDate,aiDay){
       return new Date(Date.parse(asDate.replace(/-/g,"/"))+3600*1000*24*aiDay).toLocaleString().split(" ")[0];
    }var sDay="2002-2-18",iAdd=0;
    var dt = new Date()
    for(n=0;n<1000;n++)if(qswhDate(sDay,n)==PlusDay(sDay,n))iAdd++;
    document.write("<br>",iAdd+"耗时"+(new Date()-dt))var dt = new Date()
    for(n=0;n<1000;n++)qswhDate(sDay,n);
    document.write("<br>","qswhDate耗时"+(new Date()-dt))var dt = new Date()
    for(n=0;n<1000;n++)PlusDay(sDay,n);
    document.write("<br>","PlusDay耗时"+(new Date()-dt))alert("pause")var sDay="2002-2-18",iAdd=0;
    var dt = new Date()
    for(n=0;n>-1000;n--)if(qswhDate(sDay,n)==PlusDay(sDay,n))iAdd++;
    document.write("<br>",iAdd+"耗时"+(new Date()-dt))var dt = new Date()
    for(n=0;n>-1000;n--)qswhDate(sDay,n);
    document.write("<br>","qswhDate耗时"+(new Date()-dt))var dt = new Date()
    for(n=0;n>-1000;n--)PlusDay(sDay,n);
    document.write("<br>","PlusDay耗时"+(new Date()-dt))
    </script>但结果是1000耗时1593
    qswhDate耗时1051
    PlusDay耗时3811000耗时1222
    qswhDate耗时721
    PlusDay耗时371 仍然不如Date,但兼容性好,呵呵
      

  29.   

    <%
       java.util.Calendar cal = new java.util.GregorianCalendar();
       cal.add(Calendar .Date,+1)
       cal.add(Calendar .Date,-1)
    %>
    可以对许多天进行计算。
      

  30.   

    但是C里面有没有类似javascript的实现方法?
    或者有类似的API吗?
      

  31.   

    To samoonm(寒月) :
    就是不想用js的Date特性,所以才自己写了一个,
    思路可以延伸到其他语言,要不何苦呢?
      

  32.   

    To samoonm(寒月) :
    就是不想用js的Date特性,所以才自己写了一个,
    思路可以延伸到其他语言,要不何苦呢?
      

  33.   

    我也尝试写了个,看看,帮忙优化优化~~
    <script>
    //定义类
    var msize = new Array(2,1,0,1,0,1,0,1,1,0,1,0,1);
    function MyDate(ayear,amonth,adate)
    {
    this.year = ayear;
    this.month = amonth;
    this.date = adate;
    this.nextday = DoGoNextDay_MyDate;
    this.prevday = DoGoPrevDay_MyDate;
    this.getdate = DoGetDate_MyDate;
    }
    function DoGetDate_MyDate(){ return (this.year + "年" + this.month + "月" + this.date + "日")}
    function DoGoNextDay_MyDate()
    {
    this.date ++;
    maxmonth = (msize[this.month]==1)?31:30;
    maxmonth = (this.month==2)?((this.year%4==0 && this.year&400!=0)?29:28):maxmonth;
    if(this.date>maxmonth)
    {
    this.month++;
    this.date = 1;
    if(this.month>12)
    {
    this.year++;
    this.month = 1;
    this.date = 1;
    }
    }
    }
    function DoGoPrevDay_MyDate()
    {
    this.date --;
    if(this.date==0)
    {
    this.month--;
    if(this.month)
    {
    if(msize[this.month]) this.date = 31;
    else
    {
    this.date = 30;
    if(this.month == 2) this.date = 28;
    if(this.year%4==0 && this.year&400!=0) this.date = 29;
    }
    }
    else
    {
    this.year--;
    this.month = 12;
    this.date = 12;
    }
    }

    }
    </script><script>
    //测试
    abc = new MyDate(2002,6,22);
    document.write("现在是:"+abc.getdate());
    document.write("<br>");for(n=0;n<100;n++)
    abc.nextday();
    document.write("百日后:"+abc.getdate());
    document.write("<br>");abc = new MyDate(2002,6,22);
    for(n=0;n<100;n++)
    abc.prevday();
    document.write("百日前:"+abc.getdate());
    document.write("<br>");
    </script>结果显示:
    现在是:2002年6月22日
    百日后:2002年9月30日
    百日前:2002年3月14日