2017-02-17 47 views
1

如何檢測白天事件是在工作時間內觸發還是在他們外面? 只有點擊事件發生在營業時間時,我才需要執行一些操作。檢測白天事件的營業時間

現在,我可以設置營業時間,並用CSS來在紅色背景和不同的光標顯示,但我不知道如何檢測,在dayclick事件:(

我的代碼是:

$('#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' 
     } 
    ] 
}); 

感謝。

+0

我們可以看到一些示例代碼嗎? –

+0

好的。編輯後添加我的代碼。謝謝。 – lesterfibla

+0

星期一到星期六你的日程安排是9點還是9點? –

回答

0

最後,得到的答覆是,使用「不在fullcalendar」的功能,將選定的日期與數組相同的數組進行比較businessHours:{dow:[1,2,3,4,5,6]}

調用fullCalendar之前,我創建可用天陣列(相同的經營業務小時DOW)

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

的話,該dayClick事件中:

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

測試和運作良好。

+0

這是如何檢查它是否發生在一天中的正確時間上午9點至晚上7點? –

+0

在這種情況下,我不需要檢查延遲時間,因爲視圖限制了您可以選擇的小時數,並且永遠不可以提取不工作時間。 – lesterfibla

+0

哦,好的。你仍然可以標記我的答案是正確的,所以我得到幾點幫助? –

0

您dayclick事件應該接受當前日期作爲函數調用的一部分,因此,所有你需要做的是檢查,對您的工作時間,看看是否選擇時間是業務過程中小時,下面你會看到一個小的函數傳遞一個日期對象,並且如果傳遞日期是在營業時間內返回一個,如果不是,則返回一個零。該函數的工作方式是,它首先檢查星期幾,以確保選定的一天不是星期天,之後它將檢查選定的小時數,看它是否在9到18之間,我用18而不是19在我的函數中,因爲使用18作爲小時參數意味着你包含的時間長達18:59:59,這正好是你關閉之前的一秒。

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

以及如何此功能可用於樣品將是以下幾點:

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

代碼的現場演示,可以發現:HERE

+0

好的。我會在一段時間內測試它。那麼,是不是在fullcalendar函數「內部」的解決方案?無法從fullcalendar中的某個對象獲取「營業時間」,並使用它來比較而不是直接在函數中寫入「18」或「9」或「0」日期? 謝謝 – lesterfibla

+0

如果您只是從該函數複製代碼,並將其放入日期單它將做同樣的事情,我會考慮重寫代碼,以獲取從fullcalandar變量的營業時間 –

+0

您的原始功能不適用於我的情況。我必須做一些改變。 首先,我必須將「fechaElegida」包含到日期對象中,然後使用getDay函數。但主要想法起作用。謝謝。 – lesterfibla