100分 JavaScript 计算周!急

blankfang 2009-03-05 03:08:25
我前面有两个下拉框, 一个是年,一个是月, 年份我要从库中取出来的,月份我是直接用HTML写的,


要实现的是:
我选择年,在选择月, 在后面的下拉框中显示出来,该年的第几个月 是从第几周到第几周!!

注意: 因为这里周可能是跨月的,只要是有一天在该月,就算在这个月,


例如我输入2009年 3月: 后面下拉框会自动显示出3月的5个周,分别是 10.11.12.13.14.15

谢谢,在线等
...全文
465 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
JaggerLee 2009-03-05
  • 打赏
  • 举报
回复
哈哈 COPY 被发现了
CutBug 2009-03-05
  • 打赏
  • 举报
回复
跨年没处理好,12月测试有点问题,改一下
function getWeeks(y,m){
var d1 = new Date(y,0,1);
var fd = new Date(y,m-1,1)
var fday = d1.getDay();
var fwd = 7-fday;
var weeks = 1;
var weekSet = m==1?[1]:[];
var t;
d1.setDate(fwd);

while(d1<=new Date(y,m,1)){
d1.setDate(d1.getDate()+7);
t = d1.getMonth();
if(t!=m || (t==m && d1.getDate()<7)){
++weeks;
if(t>=m-1 || (d1.getYear()==parseInt(y)+1 && d1.getDate()!=7)){ //后面的条件针对跨年做处理
weekSet.push(weeks);
}
}
}
return weekSet;

}

CutBug 2009-03-05
  • 打赏
  • 举报
回复
整理一下重发
<script >
//y:年 m:月 return weekSet[]
function getWeeks(y,m){
var d1 = new Date(y,0,1);
var fd = new Date(y,m-1,1)
var fday = d1.getDay();
var fwd = 7-fday;
var weeks = 1;
var weekSet = m==1?[1]:[];
var t;
d1.setDate(fwd);

while(d1<=new Date(y,m,1)){
d1.setDate(d1.getDate()+7);
t = d1.getMonth();
if(t!=m || (t==m && d1.getDate()<7)){
++weeks;

if(t>=m-1 || d1.getYear()==parseInt(y)+1){

weekSet.push(weeks);
}
}
}
return weekSet;

}
//y:年 m:月 void
function eChangeDate(y,m){

var weeks = getWeeks(y,m);
var sWeek = document.getElementById("sWeek");
sWeek.options.length=0;
for(var i=0;i<weeks.length;i++){
sWeek.options.add(new Option("第"+weeks[i]+"周",weeks[i]));
}
}

window.onload=function(){
var sYear = document.getElementById("sYear");
var sMonth = document.getElementById("sMonth");
sYear.options.add(new Option('年',0));
for(var i=2005;i<2020;i++){
sYear.options.add(new Option(i,i));
}

for(var i=1;i<13;i++){
sMonth.options.add(new Option(i,i));
}

sMonth.onchange=function(){eChangeDate(sYear.value,sMonth.value)}
sYear.onchange=function(){eChangeDate(sYear.value,sMonth.value)}
var d = new Date();
sYear.value = d.getYear();
sMonth.value = d.getMonth()+1;
eChangeDate(sYear.value,sMonth.value);
}
</script>
<select id="sYear">
</select>
<select id="sMonth">
</select>
<select id="sWeek">
</select>
CutBug 2009-03-05
  • 打赏
  • 举报
回复
上面小改
for(var i=1;i<13;i++){
sMonth.options.add(new Option(i,i));
}
显示12个月,我测了一下没问题,LZ可以测试了一下
CutBug 2009-03-05
  • 打赏
  • 举报
回复
<script >
//y:年 m:月 return weekSet[]
function getWeeks(y,m){
var d1 = new Date(y,0,1);
var fd = new Date(y,m-1,1)
var fday = d1.getDay();
var fwd = 7-fday;
var weeks = 1;
var weekSet = m==1?[1]:[];
var t;
d1.setDate(fwd);

while(d1<=new Date(y,m,1)){
d1.setDate(d1.getDate()+7);
t = d1.getMonth();
if(t!=m || (t==m && d1.getDate()<7)){
++weeks;
if(t>=m-1){
weekSet.push(weeks);

}
}
}
return weekSet;

}
//y:年 m:月 void
function eChangeDate(y,m){

var weeks = getWeeks(y,m);
var sWeek = document.getElementById("sWeek");
sWeek.options.length=0;
for(var i=0;i<weeks.length;i++){
sWeek.options.add(new Option("第"+weeks[i]+"周",weeks[i]));
}
}

window.onload=function(){
var sYear = document.getElementById("sYear");
var sMonth = document.getElementById("sMonth");
sYear.options.add(new Option('年',0));
for(var i=2005;i<2020;i++){
sYear.options.add(new Option(i,i));
}

for(var i=1;i<12;i++){
sMonth.options.add(new Option(i,i));
}

sMonth.onchange=function(){eChangeDate(sYear.value,sMonth.value)}
sYear.onchange=function(){eChangeDate(sYear.value,sMonth.value)}
}
</script>
<select id="sYear">
</select>
<select id="sMonth">
</select>
<select id="sWeek">
</select>
CutBug 2009-03-05
  • 打赏
  • 举报
回复
有点问题,看一下
CutBug 2009-03-05
  • 打赏
  • 举报
回复
把我在你在前发的贴子小改一下就可以了
<script >
//y:年 m:月 return array
function getWeeks(y,m)
{
var d1 = new Date(y,0,1);
var fd = new Date(y,m-1,1)
var fday = d1.getDay();
var fwd = 7-fday;
var weeks = 1;
var weekSet = [];
d1.setDate(fwd);
while(d1<=new Date(y,m,1))
{
d1.setDate(d1.getDate()+7);
if(d1.getMonth()!=m || (d1.getMonth()==m && d1.getDate()<7))
{
weeks++;
if(d1.getMonth()>=m-1)
{
weekSet.push(weeks);
}
}

}
return weekSet;

}
//y:年 m:月 void
function eChangeDate(y,m)
{
var weeks = getWeeks(y,m);
var selMonth = document.getElementById("sWeek");
for(var i=0;i<weeks.length;i++)
{
selMonth.options.add(new Option("第"+weeks[i]+"周",weeks[i]));
}
}
window.onload=function(){eChangeDate(2009,5)}
</script>
<select id="sWeek">
</select>
yixianggao 2009-03-05
  • 打赏
  • 举报
回复
方法比较笨,一天一天算,哈
L@_@K
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>js.Date.weekIndex.html</title>
<meta name="generator" content="editplus" />
<meta name="author" content="yixianggao@126.com" />
<meta name="keywords" content="js dhtml csdn" />
<meta name="description" content="for csdn.net" />
</head>

<body>
<h3>周一为每周第一天,周日为每周最后一天。</h3>
<select id="selYear" size="1">
<option value="2008" selected>2008</option>
<option value="2009">2009</option>
<option value="2010">2010</option>
</select>
<select id="selMonth" size="1">
</select>
<select id="selWeek" size="1">
</select>

<script type="text/javascript">
<!--
function $(sId)
{
return document.getElementById(sId);
}
function clearOptions(oSelect)
{
for (var i=oSelect.options.length-1; i>=0; i--)
{
oSelect.options.remove(i);
}
}
function setMonthOptions(oMonth)
{
for (var i=0; i<12; i++)
{
oMonth.options.add(new Option((i+1)+"月", i));
}
}
function getDateWeekIndexMapping(dateWeekIndexMapping, yearNumber)
{
var i = 1;
var aDate = new Date(yearNumber, 0, i);

if (dateWeekIndexMapping[aDate]==null)
{
var weekIndex = 1;
if (aDate.getDay()==1) weekIndex = 0;

while (aDate.getFullYear()==oYear.value)
{
if (aDate.getDay()==1) weekIndex++;
dateWeekIndexMapping[aDate] = weekIndex;
aDate = new Date(yearNumber, 0, ++i);
}
}
}
function setWeekIndexOptions(dateWeekIndexMapping, oWeek, yearNumber, monthNumber)
{
clearOptions(oWeek);
var i = 1;
var aDate = new Date(yearNumber, monthNumber, i);
var weekIndex;
while (aDate.getMonth()==monthNumber)
{
if (weekIndex != dateWeekIndexMapping[aDate])
{
weekIndex = dateWeekIndexMapping[aDate];
oWeek.options.add(new Option("第"+weekIndex+"周", weekIndex));
}
aDate = new Date(yearNumber, monthNumber, ++i);
}
}

var oYear = $("selYear");
var oMonth = $("selMonth");
var oWeek = $("selWeek");

setMonthOptions(oMonth);

var dateWeekIndexMapping = new Object();

getDateWeekIndexMapping(dateWeekIndexMapping, oYear.value);

setWeekIndexOptions(dateWeekIndexMapping, oWeek, oYear.value, oMonth.value);

oYear.onchange = function() {
getDateWeekIndexMapping(dateWeekIndexMapping, this.value);
setWeekIndexOptions(dateWeekIndexMapping, oWeek, this.value, oMonth.value);
};

oMonth.onchange = function() {
setWeekIndexOptions(dateWeekIndexMapping, oWeek, oYear.value, this.value);
};

//-->
</script>
</body>
</html>
yuting_lv 2009-03-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhaolidong 的回复:]
Date.prototype.getWeekNumber = function() {
var d = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);
var DoW = d.getDay();
d.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu
var ms = d.valueOf(); // GMT
d.setMonth(0);
d.setDate(4); // Thu in Week 1
return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1;
}

在网上找了个函数库,你看看

[/Quote]
这个不错啊,测了下挺好用的
/*
* 返回日期是一年中的第几周,index from 1
* 从周一到周日算一周
* eg: 2009/1/1 周四 第一周
* 2009/3/1 周日 第9九周,属于2/23——3/1日的全年第九周
*/
blankfang 2009-03-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 JaggerLee 的回复:]
我测试过了,周是从第0周开始的,你要从1开始就自己加个1


HTML code
<html>
<body>
<select id="year">
<option value="0">请选择年</option>
</select>
<select id="month" onchange="AddWeek();">
<option value="0">请选择月份</option>
</select>
<select id="week">
<option >请选择周</option>
</select>
</body>
</html>
<script>
window.onload=function(){
var sel_month = document.getEl…
[/Quote]


还是有问题呀!!2009年5月就不对了,哈哈,不过还是谢谢~~~~~~~
yixianggao 2009-03-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 JaggerLee 的回复:]
我测试过了,周是从第0周开始的,你要从1开始就自己加个1
[/Quote]
肯定是copy来滴代码,getWeek(flag) 的 flag 标志控制当第一天不是周一时是否将该周计为第一周,
true 就从 1 开始计,即 getWeek(true);
false 或 不填 就计为 0。
JaggerLee 2009-03-05
  • 打赏
  • 举报
回复
汗,他上一题是什么呀??
枉费我花时间...
  • 打赏
  • 举报
回复
汗!!
跟上以题基本类似…………

楼主是来偷代码的吧

JaggerLee 2009-03-05
  • 打赏
  • 举报
回复
我测试过了,周是从第0周开始的,你要从1开始就自己加个1


<html>
<body>
<select id="year">
<option value="0">请选择年</option>
</select>
<select id="month" onchange="AddWeek();">
<option value="0">请选择月份</option>
</select>
<select id="week">
<option >请选择周</option>
</select>
</body>
</html>
<script>
window.onload=function(){
var sel_month = document.getElementById("month");
for(var mon=1;mon<=12;mon++)
{
var op = new Option();
op.value = mon;
op.innerHTML = mon + "月";
sel_month.appendChild(op);
}

var sel_year = document.getElementById("year");
for(var mon=2009;mon<=2020;mon++)
{
var op = new Option();
op.value = mon;
op.innerHTML = mon + "年";
sel_year.appendChild(op);
}
};

Date.prototype.getWeek = function(flag)
{
var first = new Date(this.getFullYear(), 0, 1);
var n = parseInt( "1065432 ".charAt(first.getDay()));
n = this.getTime()-first.getTime()-n*24*60*60*1000;
n = Math.ceil(n/(7*24*60*60*1000));
return (flag==true&&first.getDay()!=1)?(n+1):n;
};

function AddWeek()
{
var sel_week = document.getElementById("week");
sel_week.innerHTML="<option >请选择周</option>";
var theMonth = parseInt(document.getElementById("month").value);
var theYear = parseInt(document.getElementById("year").value);

theDate = new Date(theMonth+'/01/'+theYear);
var minWeek = theDate.getWeek();
nextDate = new Date((theMonth+1)+'/01/'+theYear);
var maxWeek;

if(theMonth != 12)
{
if(nextDate.getDay()==1)
{
maxWeek = nextDate.getWeek() - 1;
}
else
{
maxWeek = nextDate.getWeek();
}
}
else
{
maxWeek = new Date("12/31/"+theYear).getWeek();
}


for(var i=minWeek;i<=maxWeek;i++)
{
var op = new Option();
op.value = i;
op.innerHTML = "第" + i + "周";
sel_week.appendChild(op);
}
}
</script>
zhaolidong 2009-03-05
  • 打赏
  • 举报
回复
Date.prototype.getWeekNumber = function() {
var d = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);
var DoW = d.getDay();
d.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu
var ms = d.valueOf(); // GMT
d.setMonth(0);
d.setDate(4); // Thu in Week 1
return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1;
}

在网上找了个函数库,你看看

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧