我已经在网上搜索并找到了该脚本来获取一年中的星期数。但是我的计算是有区别的。下图是我要获取的星期数。当我使用“ 1/5/2015”进行测试时,我的代码得到的星期数是2,但是在我的要求中,星期数应该是1。有人可以帮我吗。提前致谢。

javascript - 在JavaScript中从整周的日期中获取日期的星期数-LMLPHP

我在IamSilviu/Get week number 找到了javascript

有我的代码:

function myWeekNumber(thisDate) {
var dt = new Date(thisDate)
    var onejan=new Date(dt.getFullYear(), 0, 2);
    return Math.ceil((((dt - onejan) / 86400000) + onejan.getDay() + 1) / 7);    }

最佳答案

您尝试实现的算法似乎是:


星期几从星期日开始
一年的第一周是一年中有任何几天的一周,例如2016年1月1日是星期五,因此2016年的第一周是2015年12月27日星期日


在这种情况下,最好使用UTC方法来避免夏令时问题:



function getWeekNumberNonISO(d) {
  // Create UTC equivalent for 23:59:59.999 on the passed in date
  var sat = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate(),23,59,59,999));
  // Set to Saturday at end of week
  sat.setUTCDate(sat.getUTCDate() + 6 - sat.getUTCDay());
  // Get first day of year
  var firstDay = new Date(Date.UTC(sat.getUTCFullYear(), 0, 1));
  // Set to Sunday on or before, i.e. first day of first week in year
  firstDay = firstDay.setUTCDate(firstDay.getUTCDate() - firstDay.getUTCDay());
  // Week number is difference in dates divided by ms/week rounded
  return Math.round((sat - firstDay)/(6.048e8));
}

// Get week number for Mon 5 Jan 2015
console.log(getWeekNumberNonISO(new Date(2015,0,5))); // 2
// Get week number for Sat 31 Dec 2011
console.log(getWeekNumberNonISO(new Date(2011,11,31))); //53
// Get week number for Sat 1 Jan 2011
console.log(getWeekNumberNonISO(new Date(2011,0,1))); // 1
// Get week number for Sun 2 Jan 2011
console.log(getWeekNumberNonISO(new Date(2011,0,2))); // 2

10-05 20:52
查看更多