有关日期对象date的问题,见内

希偌 深圳市车厘子网络科技有些公司 CTO/CIO/技术副总裁/总工程师  2005-09-27 10:17:16
1、如何取得某一年某一个月的起始和结束日期,因为各个月的天数是不固定的,请动态实现

2、如何取得某一年某一周的起始和结束日期

谢谢
...全文
155 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
JK_10000 2005-09-28
<script>
function getMonthStartDay(y,m)
{
return new Date(y,m-1,1);
}

function getMonthEndDay(y,m)
{
return new Date(y,m,0);
}

function getWeekStartDay(y,w)
{
var tempD=new Date(y,0,1);
return new Date(y,0,7*w-6-tempD.getDay())
}

function getWeekEndDay(y,w)
{
var tempD=new Date(y,0,1);
return new Date(y,0,7*w+1-tempD.getDay())
}

alert("2005年1月末"+getMonthEndDay(2005,1));
alert("2005年1周始"+getWeekStartDay(2005,1));
alert("2005年1周末"+getWeekEndDay(2005,1));
</script>
回复
cxz7531 2005-09-28
<script>
function getWeekStartEnd(str){
//求指定日期所在星期的开始和结束 从周日到周六
var ldate=86400000; var td=new Date(str);
var dtend=new Date(td.getTime()-td.getDay()*ldate+6*ldate);
var dtstart=new Date(dtend.getTime()-6*ldate);
return new Array(dtstart,dtend);
}
function getMonthStartEnd(str){
//求指定日期所在月的开始和结束
var td=new Date(str);td.getDate();
var dtstart=new Date(td.getTime());dtstart.setDate(1);
var dtend=new Date(td.getTime());
dtend.setMonth(td.getMonth()+1);
dtend.setDate(0);
return new Array(dtstart,dtend);
}
var ret=getWeekStartEnd("2005/9/28");
alert("所在的星期:从"+ret[0]+"到"+ret[1]);
ret=getMonthStartEnd("2005/9/28");
alert("所在的月:从"+ret[0]+"到"+ret[1]);
</script>
回复
qiqunet 2005-09-28

当前周的起始结束日期:

<script language="javaScript">
function weekb(da){
var b=new Date(da);
var bb=b-1;
bb=b-b.getDay()*24*3600000;
var be=bb+6*24*3600000;
bb=new Date(bb);
be=new Date(be);
return (bb.getMonth()+1)+"/"+bb.getDate()+"/"+bb.getYear()+":"+(be.getMonth()+1)+"/"+be.getDate()+"/"+be.getYear();
}

alert(weekb("12/2/2005"));
</script>

回复
qiqunet 2005-09-28

其实计算闰看也不是很难,不过那闰年规则实在容易把人搞糊涂:
下面是用数组的形式计算每上月的结束日:

<script language="javaScript">
function datebe(da){
var a=new Date(da);
var yea=a.getYear();
var mon=a.getMonth();
var Monthdays=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
Monthdays[1] = (0==yea%4 && (yea%100!=0 || yea%400==0)) ? 29 : 28;
var beginday=(mon+1)+"/1/"+yea;
var endday=(mon+1)+"/"+Monthdays[mon]+"/"+yea;
return beginday+":"+endday;
}

alert(datebe("12/25/2005"));
</script>
回复
qiqunet 2005-09-28

这样做比自己去推算什么闰年、大小月容易多了:

<script language="javaScript">
function datebe(da){
var a=new Date(da);
var mon=a.getMonth()+1;
var yea=a.getYear();
var beginday=mon+"/1/"+yea;
if(mon==12){mon=1;yea=yea+1;}
else mon=mon+1;
var endday=new Date(mon+"/1/"+yea);
endday=endday-24*3600000;
endday=new Date(endday);
endday=(endday.getMonth()+1)+"/"+endday.getDate()+"/"+endday.getYear();
return beginday+":"+endday;
}

function weekb(yea,wee){
var b=new Date("1/1/" +yea);
var bb=b-1;
bb=bb+1+((wee-1)*7-b.getDay())*24*3600000;
var be=bb+6*24*3600000;
if(((wee-1)*7-b.getDay())<0)bb=bb+b.getDay()*24*3600000;
bb=new Date(bb);
be=new Date(be);
return (bb.getMonth()+1)+"/"+bb.getDate()+"/"+bb.getYear()+":"+(be.getMonth()+1)+"/"+be.getDate()+"/"+be.getYear();
}

alert(datebe("12/25/2005"));
alert(weekb("2004",1));
</script>
回复
qiqunet 2005-09-27

我有个笨笨的办法,但比用月份直接算要直观易求:

一个月的起始日期当然是某月1日啦,
一个月的结束日期嘛,下一个月的1日减一天就是结束日期了。

而至于第几周的起始结束时间:假如是2005年第3周那么:
起始:2005年1月1日+2*7+1
结束:起始+7



回复
发动态
发帖子
JavaScript
创建于2007-09-28

8.4w+

社区成员

Web 开发 JavaScript
申请成为版主
社区公告
暂无公告