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.convertWeekNumberToFirstDate.html</title> <meta name="generator" content="editplus" /> <meta name="author" content="[email protected]" /> <meta name="keywords" content="" /> <meta name="description" content="" /> </head> <body> <select id="sltYear"></select> <select id="sltWeek"></select> <span id="spnDate"></span> <script type="text/javascript"> <!-- $ = document.getElementById; var oYear = $("sltYear"); var oWeek = $("sltWeek"); var oDate = $("spnDate");for (var i=(new Date()).getFullYear(); i>=1900; i--) { oYear.add(new Option(i+"年", i)); } for (var i=1; i<=52; i++) { oWeek.add(new Option(i+"周", i)); } /* * sYear: string, 年份; * sWeek: string, 周数; * startFromFirstMonday: boolean, 是否从每年第一天开始计算周数, * true: 从每年第一天开始计算周数;false: 从每年第一个周一开始计算周数。 */ function convertWeekNumberToFirstDate(sYear, sWeek, startFromFirstMonday) { if (startFromFirstMonday == undefined) startFromFirstMonday = true; var weekIndex = 1; var year = parseInt(sYear); var week = parseInt(sWeek); var i = 1; var dFirstDate = new Date(year, 0, i); if (!startFromFirstMonday) { if (weekIndex < week) { weekIndex++; } else return dFirstDate; } if (dFirstDate.getDay() != 1) { i += 7 - dFirstDate.getDay() + 1; dFirstDate.setFullYear(year, 0, i); } if (weekIndex < week) { i += 7*(week-weekIndex); dFirstDate.setFullYear(year, 0, i); } return dFirstDate; }function displayDate() { var dFirstDate = convertWeekNumberToFirstDate(oYear.value, oWeek.value); oDate.innerHTML = dFirstDate.getFullYear()+"-"+(dFirstDate.getMonth()+1)+"-"+dFirstDate.getDate(); }displayDate(); oYear.onchange = oWeek.onchange = displayDate; //--> </script> </body> </html>
<SCRIPT LANGUAGE="JavaScript"> <!-- function mm(theyear,weekcount) { var year = theyear; var week = weekcount; if(year=="" || week=="") return;
var d = new Date(year, 0, 1); d.setDate(parseInt("1065432".charAt(d.getDay())) + week * 7); var fe = getFirstAndEnd(d); return fe.first.format("yyyy-MM-dd"); }
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; }; Date.prototype.format = function(format) { var o = { "M+" : this.getMonth()+1, //month "d+" : this.getDate(), //day "h+" : this.getHours(), //hour "m+" : this.getMinutes(), //minute "s+" : this.getSeconds(), //second "q+" : Math.floor((this.getMonth()+3)/3), //quarter "S" : this.getMilliseconds() //millisecond } if(/(y+)/.test(format)) format=format.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length)); for(var k in o)if(new RegExp("("+ k +")").test(format)) format = format.replace(RegExp.$1, RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length)); return format; };
function getFirstAndEnd(d) { var w = d.getDay(), n = 24*60*60*1000; var first = new Date(d.getTime() - parseInt("6012345".charAt(w))*n); var end = new Date(d.getTime() + parseInt("0654321".charAt(w))*n); return {first: first, end: end}; } //--> </SCRIPT>我也找了一个,贴给大家看看。。楼上的一会我试试。明天就结贴了。
<!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.convertWeekNumberToFirstDate.html</title>
<meta name="generator" content="editplus" />
<meta name="author" content="[email protected]" />
<meta name="keywords" content="" />
<meta name="description" content="" />
</head> <body>
<select id="sltYear"></select>
<select id="sltWeek"></select>
<span id="spnDate"></span>
<script type="text/javascript">
<!--
$ = document.getElementById;
var oYear = $("sltYear");
var oWeek = $("sltWeek");
var oDate = $("spnDate");for (var i=(new Date()).getFullYear(); i>=1900; i--)
{
oYear.add(new Option(i+"年", i));
}
for (var i=1; i<=52; i++)
{
oWeek.add(new Option(i+"周", i));
}
/*
* sYear: string, 年份;
* sWeek: string, 周数;
* startFromFirstMonday: boolean, 是否从每年第一天开始计算周数,
* true: 从每年第一天开始计算周数;false: 从每年第一个周一开始计算周数。
*/
function convertWeekNumberToFirstDate(sYear, sWeek, startFromFirstMonday)
{
if (startFromFirstMonday == undefined) startFromFirstMonday = true; var weekIndex = 1; var year = parseInt(sYear);
var week = parseInt(sWeek); var i = 1;
var dFirstDate = new Date(year, 0, i); if (!startFromFirstMonday)
{
if (weekIndex < week)
{
weekIndex++;
}
else
return dFirstDate;
} if (dFirstDate.getDay() != 1)
{
i += 7 - dFirstDate.getDay() + 1;
dFirstDate.setFullYear(year, 0, i);
} if (weekIndex < week)
{
i += 7*(week-weekIndex);
dFirstDate.setFullYear(year, 0, i);
} return dFirstDate;
}function displayDate()
{
var dFirstDate = convertWeekNumberToFirstDate(oYear.value, oWeek.value);
oDate.innerHTML = dFirstDate.getFullYear()+"-"+(dFirstDate.getMonth()+1)+"-"+dFirstDate.getDate();
}displayDate();
oYear.onchange = oWeek.onchange = displayDate; //-->
</script>
</body>
</html>
<SCRIPT LANGUAGE="JavaScript">
<!--
function mm(theyear,weekcount)
{
var year = theyear;
var week = weekcount;
if(year=="" || week=="") return;
var d = new Date(year, 0, 1);
d.setDate(parseInt("1065432".charAt(d.getDay())) + week * 7);
var fe = getFirstAndEnd(d);
return fe.first.format("yyyy-MM-dd");
}
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;
};
Date.prototype.format = function(format)
{
var o = {
"M+" : this.getMonth()+1, //month
"d+" : this.getDate(), //day
"h+" : this.getHours(), //hour
"m+" : this.getMinutes(), //minute
"s+" : this.getSeconds(), //second
"q+" : Math.floor((this.getMonth()+3)/3), //quarter
"S" : this.getMilliseconds() //millisecond
}
if(/(y+)/.test(format)) format=format.replace(RegExp.$1,
(this.getFullYear()+"").substr(4 - RegExp.$1.length));
for(var k in o)if(new RegExp("("+ k +")").test(format))
format = format.replace(RegExp.$1,
RegExp.$1.length==1 ? o[k] :
("00"+ o[k]).substr((""+ o[k]).length));
return format;
};
function getFirstAndEnd(d)
{
var w = d.getDay(), n = 24*60*60*1000;
var first = new Date(d.getTime() - parseInt("6012345".charAt(w))*n);
var end = new Date(d.getTime() + parseInt("0654321".charAt(w))*n);
return {first: first, end: end};
}
//-->
</SCRIPT>我也找了一个,贴给大家看看。。楼上的一会我试试。明天就结贴了。
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>周数转换成日期</title>
</head><body>
<script language="vbscript">
<!--
function getData(y,w)
Dim NewDate,NewWeekDay,firstDay,ThisDate
NewDate = DateAdd("ww", w, "1-1-"&y)'2009-4-16。
NewWeekDay = Weekday(NewDate) '5(四)
firstDay=NewWeekDay-2
ThisDate = DateAdd("d",-firstDay ,NewDate)
getData=ThisDate&"(星期一) "
end function
-->
</script><script language="javascript">
<!--
function sentData(){
var v_y=parseInt(document.getElementById("my_year").value)
var v_w=parseInt(document.getElementById("my_week").value)
document.getElementById("my_data").value=getData(v_y,v_w)
}
onload=sentData
//-->
</script>
<select id="my_year" onchange="javascript:sentData()">
<option value="2015">2015年</option>
<option value="2014">2014年</option>
<option value="2013">2013年</option>
<option value="2012">2012年</option>
<option value="2011">2011年</option>
<option value="2010">2010年</option>
<option value="2009" selected>2009年</option>
<option value="2008">2008年</option>
<option value="2007">2007年</option>
<option value="2006">2006年</option>
<option value="2005">2005年</option>
</select>
<select id="my_week" onchange="javascript:sentData()">
<option value="1">1周</option>
<option value="2">2周</option>
<option value="3">3周</option>
<option value="4">4周</option>
<option value="5">5周</option>
<option value="6">6周</option>
<option value="7">7周</option>
<option value="8">8周</option>
<option value="9">9周</option>
<option value="10">10周</option>
<option value="11">11周</option>
<option value="12">12周</option>
<option value="13">13周</option>
<option value="14">14周</option>
<option value="15" selected>15周</option>
<option value="16">16周</option>
<option value="17">17周</option>
<option value="18">18周</option>
<option value="19">19周</option>
<option value="20">20周</option>
</select>
<input id=my_data></body></html>
下面是我很久前写的了,提供出来参考一下,代码可能有点乱<HTML><HEAD>
<script type="text/javascript">//目前只判断了4位有效输入的年份,
//日期输出格式已处理,统一为"yyyy-mm-dd"格式.
<!--
function checkInput(fieldValue,len){ //判断输入是否都为正确数据格式if(fieldValue.length < 0 || fieldValue.length > len)
{
alert("数据长度不对,请重新填写.年份为四位,如:2006;周次为1-2位,如1或01");
return false;
}
else
{
for(var i = 0 ; i < fieldValue.length; i++ )
{
temp = fieldValue.substr(i,1)
if(isNaN(temp))
{
alert("非法数据输入!只能输入数字,请重新输入.");
return false;
}
}
var msg = false; //处理输入0/00时出现的问题.
for(var i = 0 ; i < fieldValue.length; i++ )
{
tmp = fieldValue.substr(i,1)
if(tmp != "0") { msg = true; }
}
}
if (msg == false) {alert("非法数据输入,数据不能全部为'0',请重新输入.");return false;}
}function calcu(){
/*==================================================================================*/
//年份特殊判断,目前只实现4为有效数字输入,有空再考虑2位有效数字输入.
//4位可计算出1000--9999年间的任意时间,2位则暂时只计算1900-2099年(暂不设计)
if(document.form1.thisYear.value.length != 4)
{
alert("年份目前只能输入四位有效数字-_-! 请重新输入.");
document.form1.thisYear.focus();
return false;
}
/*==================================================================================*/
if(document.form1.thisYear.value.charAt(0) == "0")
{
alert("年份第一位不能为'0',请重新输入.");
document.form1.thisYear.focus();
return false;
}
//-------------------------------------------------------------------------------------
//判断年份输入是否合法.
if (checkInput(document.form1.thisYear.value,4) == false) { return false; }
//判断周次输入是否合法.
if (checkInput(document.form1.thisWeek.value,2) == false) { return false; }
//------------------------------------------------------------------------------------- var yearStart = new Date(parseInt(document.form1.thisYear.value),0,1) //设置该年1.1.
var firstDay = yearStart.getDay(); //星期
var yearEnd = new Date(parseInt(document.form1.thisYear.value),11,31) //设置该年12.31.
var endDay = yearEnd.getDay(); //星期
//-------------------------------------------------------------------------------------
//判断输入是否超过最大周次.
var maxWeek; //该年最大周次.1.1.在周一到周四,则为该年第一周,否则为上年最后一周.
if((firstDay>=1&&firstDay<=4)&&(endDay==0||endDay==4||endDay==5||endDay==6))
{
maxWeek = 53; //1.1.和12.31.都在本年,则该年有53周,否则52周
}
else
{
maxWeek = 52;
}
if(parseInt(document.form1.thisWeek.value,10) > maxWeek)
{
alert(document.form1.thisYear.value + " 年只有 " + maxWeek + " 周,请重新填写周次.");
document.form1.thisWeek.focus();
return false;
}
//-------------------------------------------------------------------------------------//-------------------------------------------------------------------------------------
//对1.1.所在周的前后几天特殊处理.
if(firstDay>=0&&firstDay<=4) {other = firstDay - 1;}
else {other = firstDay - 8}
//-------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------
//时间调整,得出要计算周的起/始时间.
//距离当年1.1.的总天数
days = (parseInt(document.form1.thisWeek.value,10)-1)*7 - other;
//转换成Ms.......
var oneMinute = 60 * 1000;
var oneHour = oneMinute * 60;
var oneDay = oneHour * 24;
//1.1.至1/1/70的毫秒数
var dateInMs = yearStart.getTime();
//当前所选周第一天离1/1/70的毫秒数.
dateInMs += oneDay * days
//日期调整(设置1/1/70至今的毫秒数)
yearStart.setTime(dateInMs);
//当前所选周最后一天处理,同上.
var weekEnd = new Date(parseInt(document.form1.thisYear.value),0,1)
var dateInMs1 = weekEnd.getTime ();
dateInMs1 += oneDay * (days + 6);
weekEnd.setTime(dateInMs1)
//-------------------------------------------------------------------------------------//-------------------------------------------------------------------------------------
//月和日的处理,一位变两位,如:1->01.
var month = yearStart.getMonth() + 1
if(month<10) { month = "0" + month;}
var day = yearStart.getDate();
if(day<10) { day = "0" + day;}
var month1 = weekEnd.getMonth() + 1;
if(month1<10) { month1 = "0" + month1;}
var day1 = weekEnd.getDate();
if(day1<10) { day1 = "0" + day1;}
//-------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------
//赋值给text框显示.
document.form1.weekTime.value = yearStart.getFullYear() + "-" + month + "-" + day;
document.form1.weekend.value = weekEnd.getFullYear() + "-" + month1 + "-" + day1;
//-------------------------------------------------------------------------------------
}//-->
</script>
</HEAD>
<BODY>
<form name = "form1">
<P>
<font size=2 color="blue">输入年份/周次,点"计算",程序将自动计算出该年该周次的时间段:</font><br><br><font size=2 color="red">年 份:<input name = "thisYear" > //填写四位格式的年份,如:2006</font><br>
<font size=2 color="red">周 次:<input name = "thisWeek" > //填写要计算的周次,如1或01</font><br>
<font size=2 color="red">时间段:<input name = "weekTime" >至<input name = "weekend" > //不需要填写,程序将自动计算</font><br><br>
<input type = "button" name = "btn" value = "计算" onclick = "calcu()">
<input type = "reset" name = "reset" value = "重置"> </P>
</form>
</BODY></HTML>