在原文的基础上改的,适应我这边的需求,从周一开始到周日(姑且算个原创哈,原文链接在最下边)。
(1)根据年份获取周次
(2) 获取当前年份周次
(3) 根据选择周次获取日期时间范围
谁有更简单的方法也告知下,一起参详参详。
function getNowFormatDate(theDate){
var day = theDate;
var Year = 0;
var Month = 0;
var Day = 0;
var CurrentDate = "";
// 初始化时间
Year= day.getFullYear();// ie火狐下都可以
Month= day.getMonth()+1;
Day = day.getDate();
CurrentDate += Year + "-";
if (Month >= 10) {
CurrentDate += Month + "-";
} else {
CurrentDate += "0" + Month + "-";
}
if (Day >= 10 ){
CurrentDate += Day ;
} else {
CurrentDate += "0" + Day ;
}
return CurrentDate;
}
//这个方法将取得某年(year)第几周(weeks)的星期几(weekDay)的日期
function getXDate(year,weeks,weekDay){
// 用指定的年构造一个日期对象,并将日期设置成这个年的1月1日
// 因为计算机中的月份是从0开始的,所以有如下的构造方法
var date = new Date(year,"0","1");
// 取得这个日期对象 date 的长整形时间 time
var time = date.getTime();
// 将这个长整形时间加上第N周的时间偏移
// 因为第一周就是当前周,所以有:weeks-1,以此类推
// 7*24*3600000 是一星期的时间毫秒数,(JS中的日期精确到毫秒)
time+=(weeks-1)*7*24*3600000;
// 为日期对象 date 重新设置成时间 time
date.setTime(time);
return getNextDate(date,weekDay);
}
// 这个方法将取得 某日期(nowDate) 所在周的星期几(weekDay)的日期
function getNextDate(nowDate,weekDay){
// 0是星期日,1是星期一,...
weekDay%=7;
var day = nowDate.getDay();
var time = nowDate.getTime();
var sub = weekDay-day;
if(sub <= 0){
sub += 7;
}
time+=sub*24*3600000;
nowDate.setTime(time);
return nowDate;
}
function isInOneYear(_year,_week){
if(_year == null || _year == '' || _week == null || _week == ''){
return true;
}
var theYear = getXDate(_year,_week,7).getFullYear();
if(theYear != _year){
return false;
}
return true;
}
// 获取日期范围显示
function getDateRange(_year,_week){
var beginDate;
var endDate;
if(_year == null || _year == '' || _week == null || _week == ''){
return "";
}
beginDate = getXDate(_year,_week,1);
endDate = getXDate(_year,(_week - 0 + 1),7);
return getNowFormatDate(beginDate) + " 至 "+ getNowFormatDate(endDate);
}
//日期处理
function dateRange(obj){
//获取当前年
var year = $("#yearId").val();
if(isInOneYear(year,obj.value)){
var showDate = getDateRange(year,obj.value);
document.getElementById("_dateRange_import").value=showDate;
}else{
alert(year+"年无"+obj.value+"周,请重新选择");
return;
}
}
</pre><pre name="code" class="javascript">/**
* 获取当前年份共有多少周次(本次未用到)
*/
function getNumOfWeeks(){
var myDate = new Date();
var year = myDate.getFullYear(); //获取当前年
var d=new Date(year,0,1);
var yt=(( year%4==0 && year%100!=0) || year%400==0)? 366:365;
var allwk = Math.ceil((yt-d.getDay())/7.0);
return allwk;
}
//获取当前日期在当前年第几周函数封装
function theWeek() {
var totalDays = 0;
now = new Date();
years = now.getYear()
if (years < 1000)
years += 1900
var days = new Array(12);
days[0] = 31;
days[2] = 31;
days[3] = 30;
days[4] = 31;
days[5] = 30;
days[6] = 31;
days[7] = 31;
days[8] = 30;
days[9] = 31;
days[10] = 30;
days[11] = 31;
//判断是否为闰年,针对2月的天数进行计算
if (Math.round(now.getYear() / 4) == now.getYear() / 4) {
days[1] = 29
} else {
days[1] = 28
}
if (now.getMonth() == 0) {
totalDays = totalDays + now.getDate();
} else {
var curMonth = now.getMonth();
for (var count = 1; count <= curMonth; count++) {
totalDays = totalDays + days[count - 1];
}
totalDays = totalDays + now.getDate();
}
//得到第几周
var week = Math.ceil(totalDays / 7);//原代码使用的是round
return week;
}
//根据选择年份获取周次
function getWeeks(obj){
//年份变更,更改周次对应日期
$("#_dateRange_import").val("");
var year = obj.value;
var d=new Date(year,0,1);
var yt=(( year%4==0 && year%100!=0) || year%400==0)? 366:365;
var allwk = Math.ceil((yt-d.getDay())/7.0);
//获取当前年份,判断选择年份是否是当前年份
var myDate = new Date();
var curYear = myDate.getFullYear();
var curweek = document.getElementById("showweeks");
if(curYear==year){//如果是当前年份,获取当前日子的周次
var theweek = theWeek();
var str = "";
str+="周次:<select id=\"dateSearch\" οnchange=\"dateRange(this)\"><option value=\"\">请选择周次</option>";
for(var i=theweek;i<=allwk;i++){
str+="<option value="+i+">第"+i+"周</option>" ;
}
str+= "</select>";
curweek.innerHTML = str ;
}else{//如果不是获取年份内的所有周次值
var str = "";
str+="周次:<select id=\"dateSearch\"οnchange=\"dateRange(this)\"><option value=\"\">请选择周次</option>";
for(var i=1;i<=allwk;i++){
str+="<option value="+i+">第"+i+"周</option>" ;
}
str+= "</select>";
curweek.innerHTML = str ;
}
}
这个本放在最上边的。直接搁这儿啦。
<table>
<tr>
<td>
年份 :
<select id="yearId" οnchange="getWeeks(this)" >
<c:forEach begin="${today.get(1)}" end="2020" var="i" step="1">
<option value="<c:out value='${i}'/>"><c:out value='${i}'/>年</option>
</c:forEach>
</select>
</td>
<td id="showweeks">
周次:
<select id="dateSearch" οnchange="dateRange(this)">
<option value="">请选择周次</option>
<c:forEach begin="${today.get(3)}" end="52" var="i" step="1">
<option value="<c:out value='${i}'/>">第<c:out value='${i}'/>周</option>
</c:forEach>
</select>
</td>
<td>
时间段:<input id ="_dateRange_import" readonly="readonly" type="text" />
</td>
</tr>
</table>
原文链接: js获取指定日期周数以及星期几的小例子,这个是从每周的周四开始计算的。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章