【问题标题】:end of month Ruby月末红宝石
【发布时间】:2013-11-26 09:55:45
【问题描述】:

我的 Ruby 应用在处理时显示月初(第 1 天):

start_month => Date.today.month

我想要月底,所以我改成了:

start_month => Date.today.end_of_month

但它显示的是月初。你知道为什么吗?

根据cmets,我改写如下,还是不行。我确定我拼错了什么

<div class="field">
  <%= f.label :delivered_at, "Estimated delivery"  %><br />
  <%= f.date_select(:delivered_at.end_of_month, :start_year => Date.today.year, :start_month => Date.today.end_of_month,:prompt => { :month => 'Choose month', :year => 'Choose year'}, :discard_day => true) %>
</div>

【问题讨论】:

  • Date.today.month 不显示月初,而是显示月份。而且,在带有require "date" 的普通Ruby 中没有Date#end_of_month
  • 如果您使用的是 Rails,那么 end_of_month 确实应该显示月底(例如,今天调用它会得到 Sat, 30 Nov 2013)。不应有错误或异常行为。代码中很可能还有其他问题,或者我们没有看到的某些部分。
  • @Teeg +1,很可能是其他问题。如果您想在 rails/activesupport 之外执行此操作,Date.new(2013, 11, -1) 将为您提供给定年/月的最后一天。
  • 其实我只是写了 end_month => Date.today.end_of_month 还是不行
  • @Mel 你是在使用 Rails 还是这是一个普通的 Ruby 应用程序?试试 Eric Andres 的建议。

标签: ruby-on-rails ruby time activesupport


【解决方案1】:

鉴于您显示的视图的代码,我猜您的问题出在您的控制器代码中。如果您查看documentation 中的f.date_select,则丢弃该日期会使其默认为该月的第一天。除非您在控制器中使用 delivered_at 做某事,否则它将始终是每月的第一天,因此您需要在保存模型之前将其更改为 delivered_at.end_of_month

【讨论】:

  • 我在下面编辑了我的问题,因为它仍然无法正常工作。我确定我拼错了smth
  • 如果可以,请发布您的控制器代码。这将提供比您的视图代码更多的信息。
【解决方案2】:
Date.today.to_date.end_of_month

输出:

Sat, 30 Nov 2013

Date.today.to_date.end_of_month.month

输出:

11

【讨论】:

    猜你喜欢
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多