2013-10-08 4 views
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 как в этой теме Different date saved to database - wrong time zone, но это все та же:

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

Дата в базе данных всегда 4 часа вперед, и когда я возвращаю даты с базы данных, они отображаются неправильно на FullCalendar.

+1

Звучит как проблема с часовым поясом. В какой временной зоне ваша база данных так думает? Что думает ваш код? –

+0

Моя база данных сохраняет все в часовой пояс UTC. Я в настоящее время в Нью-Йорке, и если я создам событие в 10 утра, он будет сохранен в базе данных, например, в 2 часа дня. Итак, разница в 4 часа. – Cristiano

+0

Думаю, я нашел решение. Кажется, он не хочет автоматически конвертироваться, поэтому после даты, когда мне нужно поставить «in_time_zone», а затем она будет конвертировать ее в обычную для назначенного часового пояса. – Cristiano

ответ

0

Ваши манипуляции с данными должны происходить в вашем контроллере, а не в вашем представлении. Представление должно только выплеснуть предварительно обработанные значения.

Я бы рекомендовал сопоставить свои @appointments со своими :start и :end эквивалентами строк в виде массива хэшей или массива массивов.

0

Я не думаю, что вы действительно хотите config.active_record.time_zone_aware_attributes = false. Это говорит о том, что вы не хотите, чтобы время было представлено в 'Central Time (US & Canada)', но вместо этого вы хотите их в UTC.

+0

Я удалил эту строку, но все равно. База данных добавляет дополнительные 4 часа. – Cristiano

+0

Я думаю, что нашел решение. Кажется, он не хочет автоматически конвертироваться, поэтому после даты, когда мне нужно поставить «in_time_zone», а затем она будет конвертировать ее в обычную для назначенного часового пояса. – Cristiano

0

Раствор сейчас:

application.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 для назначенного часового пояса.

+0

Ваши манипуляции с данными должны происходить в вашем контроллере, а не в вашем представлении. Представление должно только выплеснуть предварительно обработанные значения. –

+0

Я знаю, но у меня есть проблемы, чтобы заставить его работать в моем контроллере. Что вы предлагаете делать в контроллере? Спасибо. – Cristiano

+0

Я бы рекомендовал сопоставлять ваши '@ встречи' с их эквивалентами строки': start' и ': end' в виде массива хэшей или массива массивов. –

Смежные вопросы