转载地址:https://www.cnblogs.com/laneyfu/p/5028916.html
// 通过周数和星期计算日期
//2017年1月1日是星期日,算第一周,1月2日周一算是第二周
function dateFromWeek(year, week, day){
//year 年
//week 周
//day 星期 (1-7, 7代表周日)
var date1 = new Date(year, 0, 1);
var dayMS = 24*60*60*1000;
var xq=date1.getDay();
var result=0
if(xq==0){
if(week!=1){
var weekMS = (week-2)*7*dayMS;
result = date1.getTime()+weekMS+day*dayMS;
}else{
result = date1.getTime()-(7-day)*dayMS;
}
}else{
var firstDay = xq*dayMS;
var weekMS = (week-1)*7*dayMS;
result = date1.getTime()+weekMS+day*dayMS-firstDay;
}
date1.setTime(result);
return date1;
}
JS获取日期时遇到如下需求,根据某年某周获取一周的日期。如开始日期规定为星期四到下一周的星期五为一周。
格式化日期:
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;
}
复制代码
// 获取日期范围显示
function getDateRange(_year,_week){
var beginDate;
var endDate;
if(_year == null || _year == '' || _week == null || _week == ''){
return "";
}
beginDate = getXDate(_year,_week,4);
endDate = getXDate(_year,(_week - 0 + 1),5);
return getNowFormatDate(beginDate) + " 至 "+ getNowFormatDate(endDate);
}
// 这个方法将取得某年(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;
}
js获取当前指定的前几天的日期
function getBeforeDate(n){
var n = n;
var d = new Date();
var year = d.getFullYear();
var mon=d.getMonth()+1;
var day=d.getDate();
if(day <= n){
if(mon>1) {
mon=mon-1;
}
else {
year = year-1;
mon = 12;
}
}
d.setDate(d.getDate()-n);
year = d.getFullYear();
mon=d.getMonth()+1;
day=d.getDate();
s = year+"-"+(mon<10?('0'+mon):mon)+"-"+(day<10?('0'+day):day);
return s;
}
console.log(getBeforeDate(1));//昨天的日期
console.log(getBeforeDate(7));//前七天的日期
不能把1月1号当作第一周的第一天,通常是每年的第一个星期一为第一周的第一天。修改getXDate方法如下
$.getXDate = function (year, weeks, weekDay) {
// 用指定的年构造一个日期对象,并将日期设置成这个年的1月1日
// 因为计算机中的月份是从0开始的,所以有如下的构造方法
//每年第一周从第一个星期一开始
var date = new Date(year, "0", "1");
var firstday = date.getDay()
if (firstday > 1)
date = new Date(date.valueOf() + (8 - firstday) * 24 * 60 * 60 * 1000);
// 取得这个日期对象 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);
}