函数:
function getweek(z){//参数z是"2018-05-07 15:12:36"或者"2018/05/07 15:12:36"
var day11=Date.parse(z);
var day11=new Date(day11);
day11.setMonth(0);
day11.setDate(1);
day11.setHours(0);
day11.setMinutes(0);
day11.setSeconds(0);//到这里就得到该年的一月一日
var day11mill=day11.getTime();
var ori_day=day11.getDay();//该年的一月一日是星期几
var fill1=0;//与星期日相隔的毫秒数
if(ori_day!==0){
fill1=ori_day*60*60*24*1000;
}
var now=Date.parse(z);
now=new Date(now);
now.setHours(0);
now.setMinutes(0);
now.setSeconds(0);
var nowmill=now.getTime();
var now_day=now.getDay();
var fill2=0;
if(now_day!==0){
fill2=(7-now_day)*60*60*24*1000;
}
var cha2=(nowmill-day11mill+fill1+fill2)/(60*60*24*1000);
var week=Math.ceil(cha2/7);
if(week<10){
week="0"+week;
}
var year=now.getFullYear().toString();
year=year.substring(2);
return year+week;
}
例如:var x=getweek("2018-05-07 15:12:36");//结果是1819
这里会出现一个问题,比如2016-01-01应当为2015年第53周,以上函数却计算为2016年第一周。修改代码如下:
getWeek = str => {
let day=Date.parse(str);
//如果不是当年的第一天不是星期一,则该日所属周数为上一年的最后一周
day=new Date(day);
if(day.getDay() !== 1){
day = day.getTime()-24*60*60*1000
day = new Date(day);
}
day.setMonth(0);
day.setDate(1);
day.setHours(0);
day.setMinutes(0);
day.setSeconds(0);//到这里就得到该年的一月一日
let today = Date.parse(str);
today=new Date(today);
let todayWeek = today.getDay()
//计算日期是一年中的第几天
let rankDay = Math.ceil((today.getTime()-day.getTime())/(1000*24*60*60))
let rankWeek = Math.ceil(rankDay/7)
rankWeek = rankWeek < 10?("0"+rankWeek):rankWeek
let year = day.getFullYear().toString()
return year+rankWeek
}
例如:var x=getweek("2016-01-01 15:12:36");//结果是201553