【问题标题】:how to get next month date from today using Time如何使用时间从今天开始获取下个月的日期
【发布时间】:2015-12-03 12:27:25
【问题描述】:

我需要从今天开始生成下个月的日期。我应该手动检查month == 12并将+1添加到d.year还是有简单的解决方案? 时间课做了奇怪的数学运算:

>> d = Time.now
=> 2015-12-03 15:15:36 +0300 
>> d.month
=> 12
>> d.month.next
=> 13

【问题讨论】:

  • @hoijui,不,不是。请参阅 Stefan 的回答。
  • 是的,@Stefan 的回答非常棒,但下次考虑在选择答案之前等待更长时间。一方面,快速选择可能会阻止其他答案,这些答案可能很有趣,如果不是更好的话。此外,请注意,一些仍在准备答案的读者可能会对看到复选标记如此快速地闪烁感到失望。不用着急。

标签: ruby


【解决方案1】:

Date 有一个方法next_month

require 'date'
Date.today                  #=> #<Date: 2015-12-03 ((2457360j,0s,0n),+0s,2299161j)>
Date.today.next_month       #=> #<Date: 2016-01-03 ((2457391j,0s,0n),+0s,2299161j)>
Date.today.next_month.month #=> 1

要将Time 实例转换为Date,请使用to_date

【讨论】:

  • 完美契合。因为我要使用日期选择器,还需要计算年份。现在可以从今天开始解析到下个月,得到日、年、月。谢谢大家。
  • ...或Date.today &gt;&gt; n n 几个月后。
  • ...和Date.now &lt;&lt; nn 几个月前。 Date#&lt;&lt;Date#&gt;&gt; 都允许 n 为负数(所以 Date.new &lt;&lt; -1 是一个月后)。
【解决方案2】:

是的加+1 但是(本月 + 1)%12

if ( thisMonth == 12)
   nextMonth = 1;
else
   nextMonth = thisMonth+1;

这只是提供一个想法 我还没有看到任何边缘情况

【讨论】:

  • 在Ruby中,变量名应该写成snake_case,分号和括号是多余的,但end是必须的。除此之外,您为什么不提供使用上述模运算符的示例?
  • 除了缺少的end,它不返回日期。我没有对这个答案投反对票(而且我很少投反对票),因为我希望读者看到它收到了赞成票,这非常奇怪。
【解决方案3】:

有两种常用的可能解决方案:

1:Date.today+1.month 或仅限月份 (Date.today+1.month).month

2:Date.today.next_month 或仅一个月 Date.today.next_month.month

【讨论】:

  • Integer#month 需要 ActiveSupport,你可能会写 1.month.from_now
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多