【问题标题】:Get weeknumber of today, X weeks back and X Weeks ahead in javascript在javascript中获取今天的周数,X周前和X周前
【发布时间】:2014-09-24 14:01:38
【问题描述】:

我想要一个 javascript 函数,它将给出 当前周数,然后,当它具有周数时,从当前周数 - X 中获取所有周数,并且与未来相同,但是:当前周必须位于中心! 示例

Currentweek: 39, X: 3 该方法应返回:[38,39, 40]

Currentweek: 20 X: 4 该方法应返回:[18,19,20,21]

这看起来很简单,但是:请记住,闰年可能发生,也有的年份有 53 周

另外,x 的范围可以从 3 到 30

因为这个概念有点难以解释,所以我做了一个简单的图像:

用途:这将用于日历类型的应用程序中,您可以在其中滚动查看周数。

到目前为止我的尝试:

获取当前周数(目前有效,但不知道2015年是否有效)

Date.prototype.getWeek = function() {
  var onejan = new Date(this.getFullYear(), 0, 1);
  var weekNumber = Math.ceil((((this - onejan) / 86400000) + onejan.getDay() + 1) / 7);
  return weekNumber; }

确定当前周数在数组中的位置:

myActiveSlide = Math.floor(X/2);

如果是偶数,则向上取整,例如X=4,返回3为中心,

如果不均匀,这将给出精确的中心,例如:X = 3 它将返回 2 作为中心

就我所知,无法解决闰年问题

【问题讨论】:

  • 你能告诉我们你到目前为止所做的尝试吗?
  • 您自己有没有尝试过?如果可以,您可以发布您的代码,以便我们了解您是如何处理它的
  • 我已经编辑了问题以显示我迄今为止的尝试

标签: javascript date week-number leap-year


【解决方案1】:

我强烈建议使用 javascript 库,例如 moment.js。 这是众多解决方案中的一个示例。

  var weeks = function(currentWeek,numberOfWeeks) {
    var m = Math.floor(numberOfWeeks/2);
    var r = [];
    for (i=0;i < numberOfWeeks; i+=1) {
      var d = -1*m + i;
      r.push(moment(currentWeek).add(moment.duration(d,'week')).isoWeek())
    }
    return r;
  }


  console.log('2014-W39 3 weeks span');
  console.log(weeks('2014-W39',3));
  console.log('2014-W39 4 weeks span');
  console.log(weeks('2014-W39',4));
  console.log('2000-W52 leap year ');
  console.log(weeks('2000-W52',4));
  console.log('2004-W52 53 weeks ');
  console.log(weeks('2004-W52',5));

你可以在行动here

【讨论】:

  • 顺便说一下,星期数 1 - 9 不起作用,因为它们的格式无效。我通过添加一个 if 语句来解决它, if(weekNumber
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-12
  • 2020-06-30
相关资源
最近更新 更多