<input id="year" value="2005">年<br/>
<input id="week" value="30">周
<input type="button" value="开始运行" onclick="mm()"><br/>周起始日期<input id="weekStart"><br/>
周结束日期<input id="weekEnd">
<SCRIPT LANGUAGE="JavaScript">
<!--
function mm(input)
{
    var year = document.getElementById("year").value;
    var week = document.getElementById("week").value;
    if(year=="" || week=="") return;    var d = new Date(year, 0, 1);
    d.setDate(parseInt("1065432".charAt(d.getDay())) + week * 7);
    var fe = getFirstAndEnd(d);
    document.getElementById("weekStart").value = fe.first.format("yyyy-MM-dd");
    document.getElementById("weekEnd").value = fe.end.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>

解决方案 »

  1.   

    http://community.csdn.net/Expert/topic/4360/4360247.xml?temp=.8701746我以前的一个贴子,里面有根据年和周计算日期的,有根据日期和时间差计算日期的,可以满足你的功能要求了,没用的功能愿意删除就删除。
      

  2.   

    请教:为什么到了2005-12-26(今天)还是第51周? 好像慢了一天。是不是中国人新的一周是从星期日开始算的吗? 如果是这样那也不对啊,那也应该是2005-12-25就是第52周了啊。<SCRIPT LANGUAGE="java-script"><!--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};}  var s = "2005-12-26";var n = Date.parse(s.replace(/-/g, "/")); //正则验证时间if(!n) alert("date string is wrong!");else{  now = new Date();  years=now.getYear()  //今年是多少  months=now.getMonth()+1  //今年的第几个月  dates=now.getDate()  //今天是这个月的多少号  days=now.getDay()  //今天是星期几  times=now.getTime()  //返回完整的时间   var n = Date.parse(s.replace(/-/g, "/")); //正则验证时间    var d = new Date(n);    var firstAndEnd = getFirstAndEnd(d);           document.write("<br>"+s +" 是这一年里的第 "+ d.getWeek() +" 周");           document.write(firstAndEnd.first.format("<br>"+"yyyy-MM-dd")+"------");           document.write(firstAndEnd.end.format("yyyy-MM-dd"));} //-->   这个也慢了,因为要到2005-12-27才是第52周,你测试下啊?<SCRIPT LANGUAGE="java-script"><!--function mm(input){    var n = Date.parse(input.value.replace(/-/g, "/"));    //if(isNaN(n)) {alert("时间格式错误!"); return;}    var d = new Date(n);    //document.getElementById("week1").value = d.getWeek(true);    document.getElementById("week1").value = d.getWeek();    var fe = getFirstAndEnd(d);    document.getElementById("weekStart").value = fe.first.format("yyyy-MM-dd");    document.getElementById("weekEnd").value = fe.end.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></SCRIPT>