如果没有一堆if else语句,我怎么能写这个函数呢?

Ali*_*ani 2 javascript

我基本上只是想不出这个,不想破解它.

如果我这样做一年52周就会显得那么混乱.

有小费吗?

更新

这个问题与获得当年的本周无关.

这个问题是关于自定义日期以来已过去几周的问题.

我希望下周的训练能够在本周的第6天出现;)

我开始的日子是99:2018-05-30 18:39:29.

你的一些例子在第15周向我展示.

然而,我的代码显示了第16周,这是正确的.看到警告?

  calculateUsersCurrentWorkoutWeek: function(timestamp) {
            let daysSinceSignup = moment().diff(timestamp, "days");
            if (daysSinceSignup <= 6) {
              return 1;
            } else if (daysSinceSignup > 6 && daysSinceSignup <= 13) {
              return 2;
            } else if (daysSinceSignup > 13 && daysSinceSignup <= 20) {
              return 3;
            } else if (daysSinceSignup > 20 && daysSinceSignup <= 27) {
              return 4;
            } else if (daysSinceSignup > 27 && daysSinceSignup <= 34) {
              return 5;
            } else if (daysSinceSignup > 34 && daysSinceSignup <= 41) {
              return 6;
            } else if (daysSinceSignup > 41 && daysSinceSignup <= 48) {
              return 7;
            } else if (daysSinceSignup > 48 && daysSinceSignup <= 55) {
              return 8;
            } else if (daysSinceSignup > 55 && daysSinceSignup <= 62) {
              return 9;
            } else if (daysSinceSignup > 55 && daysSinceSignup <= 62) {
              return 10;
            } else if (daysSinceSignup > 62 && daysSinceSignup <= 69) {
              return 11;
            } else if (daysSinceSignup > 69 && daysSinceSignup <= 76) {
              return 12;
            } else if (daysSinceSignup > 76 && daysSinceSignup <= 83) {
              return 13;
            } else if (daysSinceSignup > 83 && daysSinceSignup <= 90) {
              return 14;
            } else if (daysSinceSignup > 90 && daysSinceSignup <= 97) {
              return 15;
            } else {
              return 16;
            }
          }
Run Code Online (Sandbox Code Playgroud)

Mad*_*iha 11

除以7和ceil?

const daysSinceSignup = moment().diff(timestamp, "days");
return Math.ceil(daysSinceSignup / 7);
Run Code Online (Sandbox Code Playgroud)

你今天早上错过了咖啡吗?;-)


注意:上面的函数会告诉您"从那以后的一周中的数字timestamp",这是我从您的文本中理解的,但您的代码示例并未反映出来.

要获得相同的代码示例结果,您需要.floor()添加1而不是.ceil():

const daysSinceSignup = moment().diff(timestamp, "days");
return Math.floor(daysSinceSignup / 7) + 1;
Run Code Online (Sandbox Code Playgroud)

  • 有了这个,`0`返回'0`而不是`1`和`6.5 + 7*n`为任何整数`n`返回`n`而不是'n + 1`.不确定这是否重要. (2认同)