我正在尝试将日期保存到数据库但我无法做到正确。日期是实际日期后的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上显示不正确。
答案 0 :(得分:0)
我认为你真的不想config.active_record.time_zone_aware_attributes = false
。这告诉我你不希望时间在'Central Time (US & Canada)'
中表示,而是你想要它们在UTC中。
答案 1 :(得分: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格式的数据库转换为指定的时区。
答案 2 :(得分:0)
您的数据操作应该在您的控制器中进行,而不是在您的视图中。视图应该只吐出预处理的值。
我建议将您的@appointments
映射到他们的:start
和:end
字符串,作为哈希数组或数组数组。