JS计算当前日期的周次

本文介绍了一个JavaScript函数,用于确定给定日期属于哪一年的第几周,并修复了跨年周次计算的错误,例如将2016-01-01正确识别为2015年的第53周。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数:

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值