1

我有一个简单的 datetime 属性可以在视图中选择这样的日期

= f.date_select :period_end_at, default: { day: 31 }

它默认为每月的最后一天作为示例。问题是,如果选择的月份是有 30 天的“六月”,由于六月没有“31”天,它会将对象保存为第 1 天而不是第 30 天。

如果提供的值首先适用于该月,是否有一种简单的方法可以始终保存到该月的最高日?

4

2 回答 2

0

不确定它是否可以缩短,但这应该有效(如果我正确理解了您的问题):

= f.date_select :period_end_at, default: { day: Time.days_in_month(Time.now.month) }
于 2013-08-22T13:52:10.147 回答
0

看看这个js 片段,它适用于 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,你需要指定一个更好的匹配器。

于 2016-06-28T14:58:17.070 回答