快捷导航

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

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

第二步,周数是可改的,根据周数获取开始日期和结束日期。
跪求,大神指点

免责声明:本内容仅代表回答者见解不代表本站观点,请谨慎对待。

版权声明:作者保留权利,不代表本站立场。

回复

使用道具 举报

参与会员1

慕课的编辑器真的很不好用,复制过来自动把换行符去掉了。所以我就直接不用代码包裹了,自行复制到编辑器中格式化下吧。另外就是,这个代码我没怎么测,所以也不确定是否就完美实现了要求,还有这里是以周一为起点的,为了和moment的例子做比对,所以没有像题主说的用周日做起点。可以自行修改。建议可以研究下moment的实现。
170402g51g9sr5sqrszedg.jpg
170402r100zclcb1dqybaa.jpg
/**
* 日期转周数
* @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
回复

使用道具 举报

可能感兴趣的问答

发新帖
  • 微信访问
  • 手机APP