微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 一年中获得一周

Moment js具有获取一个月中的天数的功能http://momentjs.com/docs/#/displaying/days-in-month/

但是我找不到一个函数来查找一年中的iso周数(52或53).

解决方法

这是一个不依赖于库的答案.它使用一个函数来计算12月31日所需年份的一周中的一周.如果周是1(即12月31日是下一年的第一周),它会将日数降低,直到获得不同的值,这将是所需年份的最后一周.

另一种方法是检查返回的年份是否相同并减少日期数量,直到它为止.

function getWeekNumber(d) {
    // copy date so don't modify original
    d = new Date(+d);
    d.setHours(0,0);
    // Set to nearest Thursday: current date + 4 - current day number
    // Make Sunday's day number 7
    d.setDate(d.getDate() + 4 - (d.getDay()||7));
    // Get first day of year
    var yearStart = new Date(d.getFullYear(),1);
    // Calculate full weeks to nearest Thursday
    var weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7)
    // Return array of year and week number
    return [d.getFullYear(),weekNo];
}

function weeksInYear(year) {
  var month = 11,day = 31,week;

  // Find week that 31 Dec is in. If is first week,reduce date until
  // get prevIoUs week.
  do {
    d = new Date(year,month,day--);
    week = getWeekNumber(d)[1];
  } while (week == 1);

  return week;
}

alert(weeksInYear(2015)); // 53

getWeekNumber代码来自:Get week of year in JavaScript like in PHP.

编辑

根据Scott的建议,这里有一个没有do循环的东西,所以如果12月31日是在第二年它将获得12月24日的一周.

function weeksInYear(year) {
  var d = new Date(year,11,31);
  var week = getWeekNumber(d)[1];
  return week == 1? getWeekNumber(d.setDate(24))[1] : week;
}

作为测试,2013-12-31在2014年第1周,而且WeekInYear(2013)返回52.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐