我Date.new用args(year,month)创建了一个新对象www.example.com。创建后,ruby默认添加了01的日期。有没有办法不添加第一天,而是添加我作为args传递的月份的最后一天(例如,如果是02 month,则添加28;如果是01 month,则添加31)?
ymzxtsji1#
使用Date.civil使用Date.civil(y, m, d)或它的别名.new(y, m, d),可以创建一个新的Date对象。day(d)和month(m)的值可以是负数,在这种情况下,它们分别从年底和月底开始倒计时。
Date.civil
Date.civil(y, m, d)
.new(y, m, d)
=> Date.civil(2010, 02, -1) => Sun, 28 Feb 2010 >> Date.civil(2010, -1, -5) => Mon, 27 Dec 2010
acruukt92#
要获得月末信息,您还可以使用ActiveSupport的帮助程序end_of_month。
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的更多信息。
eagi6jfj3#
所以我在谷歌上搜索同样的东西...我对以上内容不满意,所以在阅读了RUBY-DOC中的文档后,我的解决方案是:获取10/31/2014的示例Date.new(2014,10,1).next_month.prev_day
10/31/2014
Date.new(2014,10,1).next_month.prev_day
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")
这是另一种方法
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?
g52tjvyc6#
这是我基于Time的解决方案。与Date相比,我个人更喜欢它,尽管上面提出的Date解决方案读起来更好。
Time
Date
reference_time ||= Time.now return (Time.new(reference_time.year, (reference_time.month % 12) + 1) - 1).day
顺便说一句,对于十二月,你可以看到年份没有翻转。但这与问题无关,因为十二月总是有31天。对于二月,年份不需要翻转。因此,如果你有另一个需要年份才能正确的用例,那么确保也更改年份。
3htmauhk7#
下面是第一个和第三个答案,以找到前一个月的最后一天。
today_c = Date.civil(Date.today.prev_month.year, -1, -1) p today_c
7条答案
按热度按时间ymzxtsji1#
使用
Date.civil
使用
Date.civil(y, m, d)
或它的别名.new(y, m, d)
,可以创建一个新的Date对象。day(d)和month(m)的值可以是负数,在这种情况下,它们分别从年底和月底开始倒计时。acruukt92#
要获得月末信息,您还可以使用ActiveSupport的帮助程序
end_of_month
。您可以在Rails API文档中找到有关end_of_month的更多信息。
eagi6jfj3#
所以我在谷歌上搜索同样的东西...
我对以上内容不满意,所以在阅读了RUBY-DOC中的文档后,我的解决方案是:
获取
10/31/2014
的示例Date.new(2014,10,1).next_month.prev_day
iezvtpos4#
这是另一种方法
bvuwiixz5#
你可以这样做:
g52tjvyc6#
这是我基于
Time
的解决方案。与Date
相比,我个人更喜欢它,尽管上面提出的Date
解决方案读起来更好。顺便说一句,对于十二月,你可以看到年份没有翻转。但这与问题无关,因为十二月总是有31天。对于二月,年份不需要翻转。因此,如果你有另一个需要年份才能正确的用例,那么确保也更改年份。
3htmauhk7#
下面是第一个和第三个答案,以找到前一个月的最后一天。