2016-04-29 4 views
-1

Ich arbeite an einem Kalender mit PHP, um meine Daten von einem Server und Javascript für die Front-End-Mathe zu bekommen. Auf dem Server verwende ich die folgenden Werte, um damit zu arbeiten: Das heutige Datum, die Anzahl der Tage im aktuellen Monat und die heutige Position in der Woche mit Bezug auf eine Sun to Sat 0-6 Konvention. Um den ersten Tag eines bestimmten Monats zu finden, muss ich vom aktuellen Tag rückwärts arbeiten, der bekannte Werte hat.Was ist der richtige Weg, um diese Javascript-Schleife zu erreichen?

Die folgende Tabelle zeigt, was ich mit Javascript versuche. Ein Schalter ist, wenn ich die pos-Variable zurück auf 6 (7 wegen eines For-Loop-Problems) ändere, wenn ich 0 gedrückt habe, während ich weg von pos subtrahiere.

enter image description here

Das Problem ist, dass, wenn die für die Schleife beginnt, die Position des aktuellen Tages heute die 5 ist, sofort von 1 subtrahiert wird, wenn er nicht bis zum nächsten Tag sein sollte, die 28 (iV ist).

Durch Einfügen von Verzögerungen (siehe die Variable initialPos) kann ich den richtigen Wert erhalten. Das scheint nicht richtig, was ist der richtige Weg?

Hier ist ein Vergleich der Ausgänge mit und ohne Verzögerungen.

Mit Verzögerung:

enter image description here

Unverzüglich: (ohne Verzögerungsmittel I nicht 1 bis todayPositionWeek hinzugefügt haben, und 7 ist 6 für den Rücksetzzähler pos)

enter image description here

<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> 

Heute ist es in Ordnung, aber wenn der Tag aus ist (heute ist nicht am Freitag), die verschobenen Tage sind weg ...

enter image description here

+1

nicht ganz sicher, was Sie hier zu tun versuchen. können Sie nicht die eingebaute Datumsklasse von Javascript verwenden. Es ist ein wenig basic/nervig zu verwenden, aber es kann Ihren Zwecken hier dienen. Oder vielleicht können Sie nur Ganzzahlarithmetik (Mod, Floor usw.) verwenden? –

+0

@ dan-man, ich habe gezeigt, was ich versuche zu tun, das Diagramm ist, was ich zu erreichen versuche. PHP gibt mir einige bekannte Werte basierend auf dem heutigen Datum. Ich ermittle die Werte, mit denen der Kalender gefüllt werden soll. Das Problem ist, dass die Schleife nicht direkt ist, ich muss sie bearbeiten, indem ich eine "Verzögerung" hinzufüge, weil die for-Schleife läuft. Das funktioniert jetzt, macht den Job, ich sage es ist scheiße, es ist nicht richtig. Dies ist ein "Hack" oder ein Stück Mist. Dies ist auch ein vollständiger Kalender, nicht nur das heutige Datum. – janicehoplin

+1

Ich verstehe es immer noch nicht wirklich, aber machst du nicht einfach so etwas wie '(a-b)% 7'? –

Antwort

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

Ich bin jetzt so verloren, gehe nur über meinen eigenen Code, ich bin nicht einmal sicher über deinen Code. Nichts für ungut, ich sage nur, dass ich nicht in der Lage bin zu folgen, nicht einmal sicher, was ich gefragt habe, aber danke für deine Antwort. – janicehoplin

Verwandte Themen