获取指定日期是当年的第几周

获取指定日期是当年的第几周
clipboard.png
比如1月7号 才是2019年的第一周
而且1月6号是2018年的最后一周

阅读 10.3k
3 个回答

function getWeek(date){

    let nowDate = new Date(date);
    let firstDay = new Date(date);
    firstDay.setMonth(0);//设置1月
    firstDay.setDate(1);//设置1号
    let diffDays = Math.ceil((nowDate - firstDay)/(24*60*60*1000));
    let week = Math.ceil(diffDays/7);
    return week === 0 ? 1 : week;
  }
  每年的1号即是第一周的开始,是第一周,不是周一才开始算,哪怕1号是周日,2号虽是日历上的第二周,但依然算第一周
/**
 * @desc 获取日期是当年的第几周
 *
 * @param bool sunday 每一周是否从周日开始
 */
Date.prototype.getWeek = function(sunday = false) {
    const milliseconds = 24 * 3600000;
    let start = new Date(this.getFullYear() + '/01/01');
    let offset = start.getDay() > 0 ? (8 - start.getDay()) : 1;
    offset = sunday ? offset - 1 : offset;
    return Math.abs(Math.ceil((this.getTime() - start.getTime() - offset * milliseconds) / milliseconds / 7));
}

看来今天是有点闲了~~

可以这样的思路:

假设给的时间是一个Date对象,如果不是也可以转为时间对象。

基于该时间对象重新创建一个时间对象,并且把月份和日期都设置为当年的年初一月一日

用给定的时间的毫秒值减去年初的毫秒值

再用这个值去除一个星期对应的毫秒值。向上取整。就能得出是该年的第几周了。

代码大致如下:

const targetDate = new Date();
const startDate = new Date(targetDate);

startDate.setMonth(0);
startDate.setDate(1);
startDate.setHours(0,0,0,0);

const millisecondsOfWeek = 1000 * 60 * 60 * 24 * 7;

const diff = targetDate.valueOf() - startDate.valueOf();

console.log('week of the year', Math.ceil(diff / millisecondsOfWeek);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏