js 获取当前周数,并可根据周数获取日期范围

第一步是获取当前日期的周数(日期从1月1号 是第一周,每周是周日开始)

第二步,周数是可改的,根据周数获取开始日期和结束日期。

跪求,大神指点

Zoe_z
浏览 4189回答 1
1回答

橋本奈奈未

慕课的编辑器真的很不好用,复制过来自动把换行符去掉了。所以我就直接不用代码包裹了,自行复制到编辑器中格式化下吧。另外就是,这个代码我没怎么测,所以也不确定是否就完美实现了要求,还有这里是以周一为起点的,为了和moment的例子做比对,所以没有像题主说的用周日做起点。可以自行修改。建议可以研究下moment的实现。/*** 日期转周数* @example* date2Week()* // => 52* date2Week('2019-12-30')* // => 1* date2Week('2019-12-29')* // => 52* date2Week('2019-01-01')* // => 1* date2Week('2019-01-07')* // => 2* @param {string?} str 时间字符串* @return {number} 周数*/function date2Week(str) { // 获取date,不传则默认为当前date,这里没有做时间格式校验 var d = str ? new Date(str) : new Date(); // start为1/1对应的date【0时0分】 var start = new Date(d.getFullYear() + '/01/01'); // end 为当前date【0时0分】 var end = new Date(d.toLocaleDateString()); // 天数差 【上面的0时0分意在避免影响天数的计算】 var dayOffset = (end - start)/1000/60/60/24; // 以周一为一周起点,故而需要加上元旦时的偏移量 var base = dayOffset+start.getDay(); return (   dayOffset ?     base/7 > 52 ?       dayOffset%7+start.getDay() ? 1 : 52 :       Math.ceil(base/7) :1);}/*** 周数转日期范围* @example* week2DateRange(52)* // => "2019/12/23~2019/12/29"* week2DateRange(51)* // => "2019/12/16~2019/12/22"* week2DateRange(1)* // => "2018/12/31~2019/1/6"* week2DateRange(2)* // returns "2019/1/7~2019/1/13"* week2DateRange(1,'2020')* // => "2019/12/31~2020/1/6"* @param {number} num 周数* @param {date?} [date] 指定日期* @return {string} 周数的日期范围*/function week2DateRange(num,date) { if(num < 1 || num > 52) return RangeError('周数必须符合:0<num<53'); // 接受浮点数,但做取整处理。 num = num|0; var d = date ? new Date(date) : new Date(); var start = new Date(d.getFullYear() + '/01/01'); // 当前的date[0时0分] var now = new Date(start.getTime() + (num-1)*7*24*60*60*1000); // 当前周的周一date,用当前毫秒减去偏差的毫秒 var begin = new Date(now.getTime() - (now.getDay()-1)*60*60*1000); // 在得出周一的date后,周日的date即可以通过setDate的方式直接设置即可 var finish = new Date(begin); finish.setDate(begin.getDate()+6); return begin.toLocaleDateString() + '~' + finish.toLocaleDateString();}
打开App,查看更多内容
随时随地看视频慕课网APP