Cześć, Korzystam z FullCalendar plugin i napotkałem problem z wyświetlaniem eventów. Prawdopodobnie chodzi się o strefę czasową. Każdy z eventów wyświetla się na kalendarzu z tym jednak że o godzinę wcześniej. Zobrazuję to kodowo. Funkcja poniżej zwraca listę eventów. Każdy z eventów trwa tyle samo: 30 minut.

public List<CallendarEvent> GetButtonsEvents(List<CallendarEvent> list)
        {
            List<CallendarEvent> listEvent = new List<CallendarEvent>();

            int counter = 1;
            foreach (var item in list)
            {
                int count = CountButtons(item.id, item.start, item.end);
                for (int i = 0; i < count; i++)
                {
                    listEvent.Add(new CallendarEvent()
                    {
                        id = counter,
                        day = item.day,
                        title = item.title,
                        start = GetDateDay(item.day).AddHours(item.start.TimeOfDay.Hours).AddMinutes(item.start.TimeOfDay.Minutes).AddMinutes(i * 30).ToLocalTime(),
                        end = GetDateDay(item.day).AddHours(item.start.TimeOfDay.Hours).AddMinutes(item.start.TimeOfDay.Minutes).AddMinutes(i * 30).AddMinutes(30).ToLocalTime()
                    });
                    counter++;
                }
            }

            return listEvent;
        } 

Wynik debugera pokazyjący że lista jest zapełniona prawidłowo datą
sc.png

Całą listę przesyłam Jsonem


return Json(listEvent, JsonRequestBehavior.AllowGet);

W widoku natomiast korzystam z ajaxa

events: function (start, end, timezone, callback) {

                $.ajax({
                    url: '/Dentist/GetEvents/',
                    type: 'POST',
                    //data: JSON.stringify(null),
                    datatype: "json",
                    contentType: "application/json",
                    success: function (json) {
                        if (json.isRedirect) {
                            window.location.href = json.redirectUrl;
                        }
                        callback(json)
                        //
                    }
                });
            },

Tak jak wspomniałem wyżej eventy się wyświetlają tylko o godzinę za wcześnie! Zacząłem drążyć i szukać rozwiązania i napotkałem się na jedno z możliwości. Mianowicie dodałem metodę ToLocalTime() dla nowo utworzonej list czasów,którą przesyłam tak jak wcześniej Jsonem i odziwo wszsytko, działa!!!!, poniżej screen.


List<CallendarEvent> ss = new List<CallendarEvent>();
            DateTime day = new DateTime(2015,01,15,09,00,00);
            DateTime day2 = new DateTime(2015, 01, 15, 09, 30, 00);

            DateTime day3 = new DateTime(2015, 01, 15, 10, 00, 00);
            DateTime day4 = new DateTime(2015, 01, 15, 10, 30, 00);

            DateTime day5 = new DateTime(2015, 01, 15, 11, 00, 00);
            DateTime day6 = new DateTime(2015, 01, 15, 11, 30, 00);

            DateTime day7 = new DateTime(2015, 01, 15, 12, 00, 00);
            DateTime day8 = new DateTime(2015, 01, 15, 12, 30, 00);
            ss.Add(new CallendarEvent(){
                id = 1,
                title = "aa",
                start = day.ToLocalTime(),
                end = day2.ToLocalTime()

            });
            ss.Add(new CallendarEvent()
            {
                id = 2,
                title = "aa",
                start = day3.ToLocalTime(),
                end = day4.ToLocalTime()
            });
            ss.Add(new CallendarEvent()
            {
                id = 3,
                title = "aa",
                start = day5.ToLocalTime(),
                end = day6.ToLocalTime()
            });
            ss.Add(new CallendarEvent()
            {
                id = 4,
                title = "aa",
                start = day7.ToLocalTime(),
                end = day8.ToLocalTime()
            });

Tak więc, moje pytanie jest następującę w jaki sposób mógłbym zmienić strefe czasowoa dla obiektów listy typu CallendarEvent w metodzie GetButtonsEvents. Poniższy sposób nie działa nie mam zielonego pojęcia dlaczego!!

start = GetDateDay(item.day).AddHours(item.start.TimeOfDay.Hours).AddMinutes(item.start.TimeOfDay.Minutes).AddMinutes(i * 30).ToLocalTime(),
end = GetDateDay(item.day).AddHours(item.start.TimeOfDay.Hours).AddMinutes(item.start.TimeOfDay.Minutes).AddMinutes(i * 30).AddMinutes(30).ToLocalTime()

Pozdrawiam.

  • sc.png (0,02 MB) - ściągnięć: 46