<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>
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>
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>
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>
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>
<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>
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>
{
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"/");
}只是考虑了一年内的运算,可以自己照着推出跨年的运算。俺太懒了,不想写了。
Date a = new Date() ;
a.valueOf的值是从某一天开始的毫秒数吗???
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()+"日"
}哈哈
<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>
<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>
<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>
呵呵,你改我的,我改秋水的,咱们彼此彼此。
在版本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 方法
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
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
不用Date太烦了,还得判断对月运算跨年,减去的天数超过一年的,挺烦的,不过归结起来还是加switch而已,也就没有再作的兴趣了。
不过如果大家感兴趣,可以试试再一个swtich中进行所有的处理,这样的代码是最紧凑的。
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,使代码简化
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
c/c++或bcb里如何实现?
要求就是不用Date对象,所以才有如此长的代码ps.建议最好先从头看到底
要求就是不用Date对象,所以才有如此长的代码ps.建议最好先从头看到底,我的算法思路可以沿用到c中
光这一句,我就写不出来。秋水学正则表达式的时候看的什么书呢?
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倍!怎么可能??
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)结果是对的,但是速度还是有明显差异啊
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,但兼容性好,呵呵
java.util.Calendar cal = new java.util.GregorianCalendar();
cal.add(Calendar .Date,+1)
cal.add(Calendar .Date,-1)
%>
可以对许多天进行计算。
或者有类似的API吗?
就是不想用js的Date特性,所以才自己写了一个,
思路可以延伸到其他语言,要不何苦呢?
就是不想用js的Date特性,所以才自己写了一个,
思路可以延伸到其他语言,要不何苦呢?
<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日