Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从数据库存储和检索时,FullCalendar日期不同_Javascript_Jquery_Html_Time_Fullcalendar - Fatal编程技术网

Javascript 从数据库存储和检索时,FullCalendar日期不同

Javascript 从数据库存储和检索时,FullCalendar日期不同,javascript,jquery,html,time,fullcalendar,Javascript,Jquery,Html,Time,Fullcalendar,我使用的是FullCalendar,事件对象的开始日期存储在数据库中 copiedEventObject.start = date; 我稍后检索它并使用以下命令初始化日历: $.ajax({ type: "POST", url: "Default.aspx/getCalendarEventsData", data: {}, contentTyp

我使用的是FullCalendar,事件对象的开始日期存储在数据库中

copiedEventObject.start = date;
我稍后检索它并使用以下命令初始化日历:

        $.ajax({
            type: "POST",
            url: "Default.aspx/getCalendarEventsData",
            data: {},
            contentType: "application/json",
            dataType: "json",
            success: function (msg) {
                // Replace the div's content with the page method's return.

                calendarStoredEvents = $.map(msg.d, function (item) {
                    return {
                        title: item.EventTitle,
                        start: item.start,
                        id: item.EventID,
                        staffID: item.staffID
                    };
                });
                initializeCalendar(calendarStoredEvents);
            }
        });
其中item.start为:

2013-06-30T16:00:00.000Z

现在的问题是。如果我在一个星期三存储了我的事件对象,它将检索并在星期二显示。我读了一点,这和时区有关。我尝试补充:

ignoretimezone=false(失败,然后尝试将其切换为true)

ignoretimezone=true(也失败,然后尝试添加时区)

当前时区:“亚洲/新加坡”(这也不起作用)

这是存储在数据库中的值:

            drop: function (date, allDay) { // this function is called when something is dropped

                // retrieve the dropped element's stored Event Object
                var originalEventObject = $(this).data('eventObject');

                // we need to copy it, so that multiple events don't have a reference to the same object
                var copiedEventObject = $.extend({}, originalEventObject);

                // assign it the date that was reported
                copiedEventObject.start = date;
                copiedEventObject.allDay = allDay;

                // render the event on the calendar
                // the last `true` argument determines if the event "sticks" (http://arshaw.com/fullcalendar/docs/event_rendering/renderEvent/)
                $('#calendar').fullCalendar('renderEvent', copiedEventObject, true);

                // is the "remove after drop" checkbox checked?
                if ($('#drop-remove').is(':checked')) {
                    // if so, remove the element from the "Draggable Events" list
                    $(this).remove();
                }
                // write to database
                var eventID = copiedEventObject.id;
                var staffID = copiedEventObject.staffID;
                var start = copiedEventObject.start;
                var end = copiedEventObject.end;
                var allDay = copiedEventObject.allDay;
编辑

我的网站托管在Azure中,因此我猜时间来自服务器:

当我放弃一件事

(删除:函数(日期,全天))

我使用了警报(开始)并显示它(我的客户端时间)

2013年7月17日星期三00:00:00 GMT+0800(马来半岛标准时间)

我在我的C代码中写入数据库:

    string strConnectionString = ConfigurationManager.ConnectionStrings["PCSDB"].ConnectionString;
    SqlConnection conn = new SqlConnection(strConnectionString);
    conn.Open();
    using (SqlCommand sqlCommand = new SqlCommand("INSERT INTO CalendarData (EventID, staffID, start) VALUES (@EventID, @staffID, @start)", conn))
    {
        sqlCommand.Parameters.AddWithValue("@EventID", eventID);
        sqlCommand.Parameters.AddWithValue("@staffID", staffID);
        sqlCommand.Parameters.AddWithValue("@start", start);

        int queryResult = sqlCommand.ExecuteNonQuery();
    }
    conn.Close();
当我检查数据库时,开始值变为

2013-07-16T16:00:00.000Z

编辑 更改为datetime后,我在数据库中保存了正确的日期

现在我在为对象转换它时遇到了一个问题。我用过:

  var parsedDate = $.fullCalendar.parseDate(item.start);
  var formatedDate = $.fullCalendar.formatDate(parsedDate, "dd-MM-yyyy");
传入

2013年7月17日上午12:00:00变为2014年5月7日


在将日期保存到数据库之前,必须将其转换为格式。事件将只接受类似于dd-MM-yyyy 00:00:00的格式

我的select方法中有这个,所以可能您没有正确地获取事件对象。 这对我来说很好

select: function(start, end, allDay){

      var startdate = $.fullCalendar.formatDate(start, "dd-MM-yyyy");
      var enddate = $.fullCalendar.formatDate(end, "dd-MM-yyyy");     

      alert(startdate);
      alert(enddate);
 }

这将显示一个类似于2013年7月15日的日期。

您必须先将日期转换为格式,然后才能将其保存到数据库中。事件将只接受类似于dd-MM-yyyy 00:00:00的格式

我的select方法中有这个,所以可能您没有正确地获取事件对象。 这对我来说很好

select: function(start, end, allDay){

      var startdate = $.fullCalendar.formatDate(start, "dd-MM-yyyy");
      var enddate = $.fullCalendar.formatDate(end, "dd-MM-yyyy");     

      alert(startdate);
      alert(enddate);
 }

这将显示一个日期,如2013年7月15日。

时间在数据库中的存储方式与此无关。重要的是时间如何通过API传输到FullCalendar中。假设您提供的确切字符串
“2013-06-30T16:00:00.000Z”
就是传递到FullCalendar中的字符串,那么您描述的行为是有意义的。您提供的UTC时间正在根据用户的本地时区进行调整

FullCalendar在查看日历的人的本地时区中显示日历。没有设置以UTC或任何其他时区查看日历。有些信息提到“时区不可知论”。您可以根据日历的绘制方式来考虑它,但在查看任何
日期
对象时,您仍然会看到本地时区,因为JavaScript就是这样工作的

您有一些选择:

  • 将选项设置为
    true
    ,并将输入值作为字符串而不是日期传入
  • 以不带时区偏移的字符串形式传递值(删除
    Z
  • 将值作为字符串传递,并为查看数据的人员提供正确的时区偏移
  • 将值作为已针对本地时区调整的
    Date
    对象传递

currentTimezone
选项不是FullCalendar的一部分。它位于
gcal.js
插件中,用于通过gcal1.0api将fullcalendar连接到谷歌日历。它只是在querystring中将该参数作为
ctz
传递给Google。它只影响从谷歌返回数据的方式。它在FullCalendar本身中没有任何作用。

时间在数据库中的存储方式与此无关。重要的是时间如何通过API传输到FullCalendar中。假设您提供的确切字符串
“2013-06-30T16:00:00.000Z”
就是传递到FullCalendar中的字符串,那么您描述的行为是有意义的。您提供的UTC时间正在根据用户的本地时区进行调整

FullCalendar在查看日历的人的本地时区中显示日历。没有设置以UTC或任何其他时区查看日历。有些信息提到“时区不可知论”。您可以根据日历的绘制方式来考虑它,但在查看任何
日期
对象时,您仍然会看到本地时区,因为JavaScript就是这样工作的

您有一些选择:

  • 将选项设置为
    true
    ,并将输入值作为字符串而不是日期传入
  • 以不带时区偏移的字符串形式传递值(删除
    Z
  • 将值作为字符串传递,并为查看数据的人员提供正确的时区偏移
  • 将值作为已针对本地时区调整的
    Date
    对象传递

currentTimezone
选项不是FullCalendar的一部分。它位于
gcal.js
插件中,用于通过gcal1.0api将fullcalendar连接到谷歌日历。它只是在querystring中将该参数作为
ctz
传递给Google。它只影响从谷歌返回数据的方式。它在FullCalendar本身中不起任何作用。

数据库中日历日期的数据类型是什么?在将日期保存到数据库之前,您是否对其进行了任何转换?nvarchar,我刚刚传入了变量,并保存了我要保存的内容got@BloopieBloops-您是否真的将日期存储到
nvarchar
类型中?那不太好。你在使用什么数据库?总是有更好的日期类型。如果是SQL Server,您可能应该使用
datetime
datetime2
类型。我应该先尝试更改为datetime吗?哦,天哪!更改为datetime在我的数据库中存储了正确的日期。但现在的问题是满了