0

我正在尝试将日期保存到数据库,但我无法正确处理。日期总是在实际日期后 4 小时。我正在使用 FullCalendar 来显示事件。

我这样保存日期:

var dateEnd = new Date();
            dateEnd.setDate(day);
            dateEnd.setMonth(month);
            dateEnd.setFullYear(year);
            dateEnd.setHours(hour);
            dateEnd.setMinutes(minutes);

            alert('Next slot: ' + dateEnd);


            $('#calendar').fullCalendar('renderEvent', { title: 'YOUR TITLE', start: date, end: dateEnd,allDay: false, backgroundColor: '#378006' }, true );

            $.ajax({
              type: "POST",
              url: "/create",
              data: {
                start_date: date,
                end_date: dateEnd,
                doctor_id: '1',
                user_id: '1'
              }
            });

我显示这样的事件:

events: 
        [
        <% @appointments.each do |appointment| %>
        {
          //alert(<%= appointment.start_date %>);
          title  : "Reserved",
          start  : "<%= appointment.start_date.strftime '%Y-%m-%dT%H:%M:%S' %>",
          end    : "<%= appointment.end_date.strftime '%Y-%m-%dT%H:%M:%S' %>",
          allDay : false
        },
        <% end %>
        ],

我把它放在 application.rb 中,就像在这个线程中保存到数据库的不同日期 - 时区错误,但它仍然相同:

config.time_zone = 'Central Time (US & Canada)'
    config.active_record.default_timezone = :local
    config.active_record.time_zone_aware_attributes = false

数据库中的日期总是提前 4 小时,当我从数据库中取回日期时,它们在 FullCalendar 上显示不正确。

4

3 回答 3

0

我不认为你真的想要config.active_record.time_zone_aware_attributes = false。这告诉 Rails 您不希望时间以 UTC 表示'Central Time (US & Canada)',而是希望它们以 UTC 表示。

于 2013-10-08T23:11:27.237 回答
0

目前的解决方案:

应用程序.rb:

config.time_zone = 'Eastern Time (US & Canada)'

当我显示事件时,我为每个日期添加“in_time_zone”:

        events: 
        [
        <% @appointments.each do |appointment| %>
        {
          title  : "Reserved",
          start  : "<%= appointment.start_date.in_time_zone.strftime '%Y-%m-%dT%H:%M:%S' %>",
          end    : "<%= appointment.end_date.in_time_zone.strftime '%Y-%m-%dT%H:%M:%S' %>",
          allDay : false
        },
        <% end %>
        ]

这会自动将 UTC 格式的数据库中的日期转换为指定的时区。

于 2013-10-09T16:25:37.227 回答
0

您的数据操作应该发生在您的控制器中,而不是您的视图中。视图应该只吐出预处理的值。

我建议将您映射@appointments到它们的:start:end字符串等价物作为散列数组或数组数组。

于 2013-10-10T03:50:18.850 回答