【发布时间】:2016-08-02 03:08:31
【问题描述】:
我将这个 DateTimeOffset 2016-08-01 09:30:00.0000000 -04:00 从我的 SQL Server 数据库传递到 FullCalendar。这些事件似乎正在呈现,但它们总是提前 4 小时。我想指出,当我使用 datetime2 时,它正在做完全相同的事情。我检查了 SQL Server,它显示了正确的当前时间,所以我不确定问题出在哪里。
这是我的 FullCalendar 实现:
<script type="text/javascript">
$(document).ready(function ()
{
$('#calendar').fullCalendar(
{
header:
{
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
editable: false,
events: "/home/loadevents/"
})
});
</script>
视图模型:
public class CalendarEventsViewModel
{
//Properties have to conform to the following API standards
//or the FullCalendar.js library will reject all incoming data.
//http://fullcalendar.io/docs/event_data/Event_Object/
public int id { get; set; }
public string title { get; set; }
public DateTimeOffset start { get; set; }
public DateTimeOffset end { get; set; }
}
AcctionResult/Linq:
public ActionResult LoadEvents (DateTime start, DateTime end)
{
IEnumerable<CalendarEventsViewModel> model =
db.CalendarEvents
.Select(r => new CalendarEventsViewModel
{
id = r.EventID,
title = r.EventName,
start = r.EventScheduleDateTime,
end = r.EventScheduleDateTime,
});
return Json(model, JsonRequestBehavior.AllowGet);
}
编辑:
仔细查看断点后,我注意到不是将2016-08-01 09:30:00.0000000 -04:00 推送到 FullCalendar,而是推送8/1/2016 09:30:00 AM,但它仍显示为比我的当地时间提前四个小时。我不确定偏移量是否从我的 linq 语句中的 db 中丢失,即使我在 db 和我的 viewmodel 属性中都使用了 datetimeoffset。我还在上面添加了更多代码。
编辑 2:
看来我错了,它正在发送{8/1/2016 9:30:00 AM -05:00},所以我还不确定问题出在哪里。我的猜测是这可能不符合 FullCalendar 要求?
编辑 3:
在我的数据库中,我存储了2016-08-01 09:30:00.0000000 -04:00。当它到达 linq 查询时,根据调试它变为8/1/2016 9:30:00 AM -04:00。当日期/事件显示在 FullCalendar.js 中时,它显示为比下午 1:30 晚了四个小时。我一定对偏移量有误解,但我不知道是什么。
【问题讨论】:
-
您在这方面取得了进展吗?我有兴趣看到结果。它是个人项目还是客户项目?如果它是个人的,你有它在公共存储库中吗?我很想看看,时区支持不是我在 FC 中玩过的东西。
-
这是一个客户的小项目。自上次编辑以来,我什么都没做,我刚起床。我确定所有组件都可以正常工作我只是缺少一些东西。
-
通过浏览器的 F12 工具或 Fiddler 等 HTTP 工具捕获一些实际的 JSON 响应。事件数据的 JSON 是什么样的?我猜它返回的是 old style format 而不是 ISO8601。
-
不知道如何在 Chrome 中做到这一点,所以我尝试了 Fiddler,这就是我能找到的全部
[{"id":1,"title":"Some Event","start":"\/Date(1470058200000)\/","end":"\/Date(1470058200000)\/"},{"id":2,"title":"Event 2","start":"\/Date(1471320000000)\/","end":"\/Date(1471320000000)\/"}] -
@AllyMurray 由于我无法对 FullCalendar Thai TImeZone 问题发表评论,如果我在 Twitter 或电子邮件上询问您,您是否介意? (at)Programazing 或 chris(at)thatamazingprogrammer.com
标签: jquery sql-server asp.net-mvc fullcalendar iso8601