Jak mogę wykryć, czy wydarzenie dzienne zostało spustowe w godzinę pracy lub z nich? Muszę zrobić kilka działań tylko wtedy, gdy wydarzenie kliknięci było w godzinach pracy.

Teraz mogę ustawić godziny pracy i stylowanie się z CSS, aby pokazać na czerwonym tle i innym kursorze, ale nie mam pojęcia, jak wykryć to w wydarzeniu Dayclick :(

Mój kod to:

$('#calendar').fullCalendar({
    theme: true,
    defaultView: 'agendaWeek',
    allDaySlot: false,
    header: {
        left: 'prev,next today',
        center: 'title',
        right: 'agendaWeek,agendaDay,listMonth'
    },
    contentHeight: 'auto',
    defaultDate: '2017-02-17',
    navLinks: true,
    editable: false,
    eventLimit: true,
    minTime: "09:00:00",
    maxTime: "19:00:00",
    slotMinutes: 30,
    slotDuration: "00:30:00",
    slotLabelInterval: 30,
    slotLabelFormat: 'h(:mm)a',
    defaultTimedEventDuration: "00:29:00",
    forceEventDuration: true,
    businessHours: {
        dow: [1,2,3,4,5,6], // NOT SUNDAY
        start: '09:00:00',
        end: '19:00:00'
    },
    dayClick: function(fechaElegida, todoElDia, jsEvento, vista) {
        // HERE DO THINGS
        // I want some like
        // if( IS BUSINESS HOURS ){
        //    DO SOMETHING
        // }else{
        //    DO OTHER THINGS
        // }
    },
    eventClick: function(calEvento, jsEvento, vista) {
        // MORE CODE. NOT RELEVANT
    },
    viewRender: function(view,element) { //restricting available dates to 2 moths in future
        var now = new Date();
        var end = new Date();
        end.setMonth(now.getMonth() + 1); //Adjust as needed
        if ( end < view.end) {
            $("#calendar .fc-next-button").hide();
            return false;
        }else {
            $("#calendar .fc-next-button").show();
        }
        if ( view.start < now) {
            $("#calendar .fc-prev-button").hide();
            return false;
        }else {
            $("#calendar .fc-prev-button").show();
        }
    },
    events: [
        {
            title: 'Test event',
            start: '2017-02-17 09:00:00',
            id: '14',
            skey: 'rra7r15pm8',
            color: '#10A834'
        }
    ]
});

Dzięki.

1
lesterfibla 17 luty 2017, 07:40

2 odpowiedzi

Najlepsza odpowiedź

Wreszcie, odpowiedź miała użyć funkcji "Nie w Fullcalendar", który porównuje wybrany dzień z tablicą identyczną do tablicy BusinessHours: {Dow: [1,2,3,4,5,6]} .

Przed wezwaniem do FullCalendar tworzę tablicę z dostępnymi dniami (tak samo jak Godziny biznesowe Dow)

var DaysOK = [1,2,3,4,5,6];

A następnie wewnątrz daty kliknięcia wydarzenie:

dayClick: function(mydate, allDay, jsEvent, view) {
  var mydateObj = new Date(mydate);
  var chosenDay = mydateObj.getUTCDay();
  if( daysOK.indexOf(chosenDay) >= 0 ){
    // DAY OK
  else{
    // DAY NOT AVALAIBLE
  }
}

Testowanie i dobrze działa.

1
lesterfibla 20 luty 2017, 06:34

Twoje wydarzenie dzienne powinno otrzymać bieżącą datę w ramach połączenia funkcji, więc wszystko, co musisz zrobić, to sprawdzić, czy w stosunku do godzin pracy, aby sprawdzić, czy wybrany czas jest w godzinach pracy. Poniżej zobaczysz mała funkcja, która zostanie przekazana obiekt daty i zwróci jeden, jeśli minąca data była w godzinach pracy i zero, jeśli nie. Sposób, w jaki działa funkcja, jest to, że najpierw sprawdza dzień tygodnia, aby zapewnić, że wybrany dzień nie w niedzielę, po czym sprawdzi wybraną godzinę i sprawdzenie, czy jest to między 9 a 18, używam 18 zamiast 19 W mojej funkcji, ponieważ przy użyciu 18, gdy parametr godzin oznacza, że włącznie z czasami do 18:59:59, co jest dokładnie na sekundę przed zamknięciem.

function checkIfBusinessHours(date) {
  if (date.getDay() == 0) {
    return 0;
  } else {
    if (date.getHours() <= 18 && date.getHours() >= 9) {
      return 1;
    } else {
      return 0;
    }
  }
}

I próbka tego, jak ta funkcja może być wykorzystana byłaby:

dayClick: function(fechaElegida, todoElDia, jsEvento, vista) {
    // HERE DO THINGS
    // I want some like
   if(checkIfBusinessHours(fechaElegia)==1){
    //    DO SOMETHING
   }else{
    //    DO OTHER THINGS
   }
}

Można znaleźć na żywo Demo Kodeksu: Oto

1
Mohammad Ali 19 luty 2017, 00:47