2016-04-29 7 views
-1

私はサーバーとJavaScriptからフロントエンドの計算を行うためにPHPを使ってカレンダーを作成しています。サーバーからは、以下の値を使用して作業しています:今日の日付、今月の日数、今日の日の位置ある月の最初の日を見つけるために、私は値を知っている現在の日から逆算しなければなりません。このJavascriptループを実現する正しい方法は何ですか?

下記の図は、私がJavascriptで何をしようとしているかを示しています。私がposから引き離しているときに0になったときにpos変数を6に戻すのはスイッチです(forループの問題のため7です)。

enter image description here

問題は、ループ開始のために、5である今日現在の日付の位置がすぐに1、減算されたときとき、それは28(前のある翌日まですべきではないということです)。

遅延を挿入することで(initialPos変数を参照)、適切な値を取得できます。これは正しいとは思わない、これを行う正しい方法は何ですか?

ここでは遅延の有無による出力の比較を示します。

enter image description here

遅延なし::

遅延で

enter image description here

(遅延は私がtodayPositionWeekに1を追加しなかった意味せず、及び7は、リセットPOSカウンタのため6)
<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> 

今日は問題ありませんが、今日がオフの場合(今日は金曜日にない場合)、シフトされた日数...

enter image description here

+1

ないあなたがここでやろうとしているかを正確に確認してくださいオフになっています。あなたはjavascriptの組み込みDateクラスを使用することはできません。それは少し基本的な/使用するのは面倒ですが、ここであなたの目的を果たすかもしれません。あるいは、ある種の整数演算(mod、floorなど)を使うことができますか? –

+0

@ dan-man、私は何をしようとしているのかを示しました。チャートは私が達成しようとしているものです。 PHPは、今日の日付に基づいていくつかの既知の値を私に提供します。カレンダーを埋めるための値を決定しています。問題は、ループがまっすぐ進むわけではないことです。forループがどのように実行されるかによって「遅延」を追加して編集する必要があります。これは今働いています、私はそれがうんざりだと言っています、それは正しくありません。これは、 "ハック"やいたずらです。これは、今日の日付だけでなく、完全なカレンダーです。 – janicehoplin

+1

私はまだそれを実際には得られませんが、 '(a-b)%7'のようなことをしているだけではありませんか? –

答えて

1
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); 
} 
+0

私は今や失われています。自分のコードを上書きするだけで、あなたのコードについてはわかりません。犯行はありません、私はちょうど私が追いつくことができないと言っています、私が尋ねてきたことは確かではありませんが、あなたの答えに感謝します。 – janicehoplin

関連する問題