2016-04-29 3 views
-1

Я работаю над календарем, использующим PHP, чтобы получить свои даты с сервера и Javascript, чтобы выполнить математику переднего плана. С сервера я использую следующие значения для работы с: сегодняшней датой, количеством дней в текущем месяце и сегодняшней позицией в течение недели со ссылкой на соглашение Sun to Sat 0-6. Чтобы найти первый день данного месяца, мне приходится работать в обратном направлении с текущего дня с известными значениями.Каков правильный способ достижения этого цикла Javascript?

В приведенной ниже таблице показано, что я пытаюсь сделать с помощью Javascript. Переключатель - это когда я меняю переменную pos на 6 (7 из-за проблемы с циклом), когда я нажимаю 0, когда я вычитаю из pos.

enter image description here

Проблема заключается в том, что, когда для начала цикла, позиция сегодняшнего текущего дня, который 5, сразу вычитается 1, если оно не должно быть до следующего дня, который 28 (предыдущая).

Вставив задержки (см. Переменную initialPos), я могу получить правильное значение. Это не кажется правильным, каков правильный способ сделать это?

Проведено сравнение выходов с задержками и без них.

С задержкой:

enter image description here

без задержки: (без задержки означает, что я не прибавить 1 к todayPositionWeek и 7 6 для счетчика сброса поз)

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> 

Сегодня это нормально, но если день отключен (сегодня нет в пятницу), сдвинутые дни выключены ...

enter image description here

+1

не совсем уверен, что вы пытаетесь сделать здесь. не можете ли вы использовать встроенный класс даты javascript. Это немного основополагающее/раздражающее использование, но оно может служить вашим целям здесь. Или, может быть, вы можете просто использовать целочисленную арифметику (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

Смежные вопросы