我有一个简单的日期时间属性,可以在视图
上选择这样的日期= f.date_select :period_end_at, default: { day: 31 }
默认为月份的最后一天作为示例。问题是,如果选择的月份为“6月”,则为30天,因为6月份没有“31”天,它会将对象保存为第1天而不是第30天。
如果所提供的价值高于月亮可用的价值,是否有一种简单的方法可以始终保存到月份的最高日期?
答案 0 :(得分:0)
不确定是否可以缩短,但这应该有用(如果我理解你的问题):
= f.date_select :period_end_at, default: { day: Time.days_in_month(Time.now.month) }
答案 1 :(得分:0)
看看这个js snippet,它适用于我的Rails 4.2.0
<script>
$(function(){
railsMonthDates();
$("select[id*=_2i], select[id*=_1i]").change( railsMonthDates );
});
function railsMonthDates() {
$("select[id*=_2i]").each(function(){
$monthSelect = $(this);
$daySelect = $(this).siblings("select[id*=_3i]");
$yearSelect = $(this).siblings("select[id*=_1i]");
var year = parseInt($yearSelect.val());
var month = parseInt($monthSelect.val());
var days = new Date(year, month, 0).getDate();
var selectedDay = $daySelect.val()
$daySelect.html('');
for(var i=1; i<=days; i++) {
$daySelect.append('<option value="'+i+'">'+i+'</option>');
}
$daySelect.val(selectedDay);
});
}
</script>
只需将其粘贴到具有表单的部分即可。
请注意,它匹配具有id*=_1i
,id*=_2i
或id*=_3i
的每个元素,因此如果您有更多f.date_select
,则需要指定更好的匹配器。