在Ruby中获取每月的最后一天

o0lyfsai  于 2023-01-25  发布在  Ruby
关注(0)|答案(7)|浏览(165)

我Date.new用args(year,month)创建了一个新对象www.example.com。创建后,ruby默认添加了01的日期。有没有办法不添加第一天,而是添加我作为args传递的月份的最后一天(例如,如果是02 month,则添加28;如果是01 month,则添加31)?

ymzxtsji

ymzxtsji1#

使用Date.civil
使用Date.civil(y, m, d)或它的别名.new(y, m, d),可以创建一个新的Date对象。day(d)和month(m)的值可以是负数,在这种情况下,它们分别从年底和月底开始倒计时。

=> Date.civil(2010, 02, -1)
=> Sun, 28 Feb 2010
>> Date.civil(2010, -1, -5)
=> Mon, 27 Dec 2010
acruukt9

acruukt92#

要获得月末信息,您还可以使用ActiveSupport的帮助程序end_of_month

# Require extensions explicitly if you are not in a Rails environment
require 'active_support/core_ext' 

p Time.now.utc.end_of_month # => 2013-01-31 23:59:59 UTC
p Date.today.end_of_month   # => Thu, 31 Jan 2013

您可以在Rails API文档中找到有关end_of_month的更多信息。

eagi6jfj

eagi6jfj3#

所以我在谷歌上搜索同样的东西...
我对以上内容不满意,所以在阅读了RUBY-DOC中的文档后,我的解决方案是:
获取10/31/2014的示例
Date.new(2014,10,1).next_month.prev_day

iezvtpos

iezvtpos4#

require "date"
def find_last_day_of_month(_date)
 if(_date.instance_of? String)
   @end_of_the_month = Date.parse(_date.next_month.strftime("%Y-%m-01")) - 1
 else if(_date.instance_of? Date)
   @end_of_the_month = _date.next_month.strftime("%Y-%m-01") - 1
 end
 return @end_of_the_month
end

find_last_day_of_month("2018-01-01")

这是另一种方法

bvuwiixz

bvuwiixz5#

你可以这样做:

def last_day_of_month?
   (Time.zone.now.month + 1.day) > Time.zone.now.month
end

Time.zone.now.day if last_day-of_month?
g52tjvyc

g52tjvyc6#

这是我基于Time的解决方案。与Date相比,我个人更喜欢它,尽管上面提出的Date解决方案读起来更好。

reference_time ||= Time.now
return (Time.new(reference_time.year, (reference_time.month % 12) + 1) - 1).day

顺便说一句,对于十二月,你可以看到年份没有翻转。但这与问题无关,因为十二月总是有31天。对于二月,年份不需要翻转。因此,如果你有另一个需要年份才能正确的用例,那么确保也更改年份。

3htmauhk

3htmauhk7#

下面是第一个和第三个答案,以找到前一个月的最后一天。

today_c = Date.civil(Date.today.prev_month.year, -1, -1)
p today_c

相关问题