我基本上只是想不通,也不想破解它。
如果我一年中这样做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;
}
}
答案 0 :(得分:11)
被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;
答案 1 :(得分:2)
如@Michel所说,除以7并减去1 +
calculateUsersCurrentWorkoutWeek: function(timestamp) {
let daysSinceSignup = moment().diff(timestamp, "days");
return Math.floor(daysSinceSignup / 7) + 1;
}
答案 2 :(得分:2)
最简单的方法也可以是按升序创建一个整数数组,以使这些值包含比较的上限。然后,对于daysSinceSignup
的每个值,您可以找到索引并向其中添加1
,因为您需要返回值为1
,2
,3
,。 .. 等等。如果您没有统一的间隔,这将很有用,例如当前间隔始终为7
,因此division
和ceil
的方法也可以使用,但是如果间隔不是统一的,则此方法可能真的有用。
var indexArray = [6,13,20,27,34,41,48,55,62,69,76,83,90,97];
function calculateUsersCurrentWorkoutWeek() {
let daysSinceSignup = 14;
var elemIndex = indexArray.findIndex((item)=> item > daysSinceSignup);
return elemIndex+1;
}
console.log(calculateUsersCurrentWorkoutWeek());
答案 3 :(得分:2)
您正在寻找的是
return Math.ceil((daysSinceStartup + 1) / 7);
对于-1到62之间的任何实数,这将产生与您的代码相同的结果(因为大约62,您忘记替换复制的范围)。就像原始代码一样,它将返回1表示6天,返回2表示6.01天。
答案 4 :(得分:0)
您可以将数据放入array中并使用array.find:
var datas = [
{ min: -Infinity, max: 6, ret: 1 },
{ min: 6, max: 13, ret: 2 },
{ min: 13, max: 20, ret: 3 },
{ min: 20, max: 27, ret: 4 }
];
function calculateUsersCurrentWorkoutWeek(daysSinceSignup) {
return datas.find(({min, max}) =>
daysSinceSignup > min && daysSinceSignup <= max
).ret;
}
console.log(calculateUsersCurrentWorkoutWeek(5));
console.log(calculateUsersCurrentWorkoutWeek(7));
console.log(calculateUsersCurrentWorkoutWeek(14));