实现此Javascript循环的正确方法是什么?
我正在使用PHP从服务器获取日期,并使用Javascript进行前端计算。在服务器上,我使用以下值来处理:今天的日期、当前月份的天数,以及参考Sun-to-Sat 0-6约定的一周中今天的位置。为了找到一个月的第一天,我必须从已知值的当天开始向后工作 下面的图表显示了我试图用Javascript做什么。当我从pos中减去时,当我点击0时,当我将pos变量更改回6(由于for循环问题为7)时,会出现一个开关 问题是,当for循环开始时,今天的当前日期的位置(即5)会立即减去1,而这应该是在第二天(即前一天)之前 通过插入延迟(参见initialPos变量),我能够得到正确的值。这似乎不对,正确的方法是什么 这里是有延迟和无延迟输出的比较 延迟: 立即: (毫不延迟地表示我没有将1添加到todayPositionWeek,7表示重置pos计数器为6)实现此Javascript循环的正确方法是什么?,javascript,Javascript,我正在使用PHP从服务器获取日期,并使用Javascript进行前端计算。在服务器上,我使用以下值来处理:今天的日期、当前月份的天数,以及参考Sun-to-Sat 0-6约定的一周中今天的位置。为了找到一个月的第一天,我必须从已知值的当天开始向后工作 下面的图表显示了我试图用Javascript做什么。当我从pos中减去时,当我点击0时,当我将pos变量更改回6(由于for循环问题为7)时,会出现一个开关 问题是,当for循环开始时,今天的当前日期的位置(即5)会立即减去1,而这应该是在第二天
今天=29;
今天位置周=5;
//开始计数时,todayPositionWeek被1移位为not count
var initialPos=今日职位周+1;
var numSwitches=0;
var-loopRan=0;
对于(var i=today;i>0;i--){
loopRan++;
//起始位置是6
首字母pos--;
//在第一次跑步时是5点之后
if(initialPos==0){
//重置pos计数器
初始位置=7;
//最初设置为6,但跳过5
numSwitches++;
}
firstDayPos=initialPos;
}
警报('循环结束'+firstDayPos+''+numSwitches+''+loopRan);
今天很好,但是如果今天休息(今天不是星期五),那么换班的日子就休息了
不太清楚您在这里想做什么。您不能使用javascript的内置日期类吗。使用起来有点基本/烦人,但在这里它可能会满足您的目的。或者你可以使用某种整数算法(mod、floor等)?@dan man,我已经展示了我要做的,图表就是我要完成的。PHP根据今天的日期给了我一些已知的值。我正在确定要在日历中填充的值。问题是循环不是直接的,我必须通过添加一个“延迟”来编辑它,因为for循环是如何运行的。这现在起作用了,做得很好,我说这很糟糕,这是不对的。这是一个“黑客”或一堆废话。这也是一个完整的日历,不仅仅是今天的日期。我还是不太明白,但你不是在做类似
(a-b)%7
?这似乎是个X/Y问题。您是否正在尝试设置日历(如正常的5-6周7天网格)?你想要的结果是什么?我想我会采取不同的方法。找出一个月的第一天是一周中的哪一天,然后向后循环直到找到一个星期天(除非你从一天开始),然后向前循环直到该月最后一天之后的星期六(或等于)。你需要两个循环,但它们应该更容易编写。我现在太迷茫了,只是在看我自己的代码,我甚至不确定你的代码。无意冒犯,我只是说我不能理解,甚至不知道我在问什么,但谢谢你的回答。
<script>
today = 29;
todayPositionWeek = 5;
// start the count with todayPositionWeek shifted by 1 to not count
var initialPos = todayPositionWeek+1;
var numSwitches = 0;
var loopRan = 0;
for (var i = today; i > 0; i--) {
loopRan++;
// initialPos is 6
initialPos--;
// after it is 5 on first run
if(initialPos == 0) {
// reset pos counter
initialPos = 7;
// initially this was set to 6 but skips to 5
numSwitches++;
}
firstDayPos = initialPos;
}
alert('loop ended ' + firstDayPos + ' ' + numSwitches + ' ' + loopRan);
</script>
var today = 27;
var todayPositionWeek=3;
var offset = (toDayPositionWeek+7-(today%7))%7 // ==4 because day0 ==4
function posOfAnyDay(d) {
return (offset + d) % 7;
}
function slotOfAnyDay(d) {
return Math.floor((offset + d) / 7);
}
// posOfAnyDay(13) -> 3
// slotOfAnyDay(13) -> 2
for (var i = today; i > 0; i--) {
pos = posOfAnyDay(i);
slot = slotOfAnyDay(i);
}