首页 > 解决方案 > 如何在没有一堆 if else 语句的情况下编写这个函数?

问题描述

我基本上只是无法弄清楚这一点,也不想破解它。

如果我一年这样做 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;
            }
          }

标签: javascript

解决方案


除以 7 和 ceil?

const daysSinceSignup = moment().diff(timestamp, "days");
return Math.ceil(daysSinceSignup / 7);

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


注意:上面的函数会告诉你“从那以后的周数timestamp”,这是我从你的文字中理解的,但你的代码示例并没有反映它。

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

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

推荐阅读