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