2010-12-09 115 views
33

我有一個操作日期。我想創造出已經得到本票:如何在紅寶石中獲取下個月的第一天?

day=1 
month= the next month of operation_date 
year= automatic 

例子:

operation_date = 15/11/2010 
promissory_note1_date = 1/12/2010 
promissory_note2_date = 1/01/2011 
promissory_note3_date = 1/02/2011 
promissory_note4_date = 1/02/2011 

如果上存在4個本票

我怎麼能做到嗎?

PD:對不起我的語法

回答

128

你可以做

require "active_support" 

Date.today.at_beginning_of_month 
#=> Wed, 01 Dec 2010 

Date.today.at_beginning_of_month.next_month 
#=> Sat, 01 Jan 2011 

Date.today.at_beginning_of_month.next_month.next_month 
#=> Tue, 01 Feb 2011 

等等......

+0

它真的很高興知道文檔:) ..感謝這個 – Orlando 2012-01-31 16:32:10

+23

`at_beginning_of_month`等由ActiveSupport提供,因此可以在Rails中使用,但不能在純Ruby中使用。 – iGEL 2012-10-08 09:03:45

+1

只是爲了澄清:這不是純粹的Ruby,而是Rails擴展的一部分,您需要`require'active_support/core_ext「`使其成爲可操作的 – fguillen 2013-03-16 20:30:54

7

我使用Ruby 1.8.71.9.2rvm並在這兩種情況下Date.today的結果錯誤:

ruby-1.8.7-p302 > Date.today 
NameError: uninitialized constant Date 

ruby-1.9.2-p0 > Date.today 
NameError: uninitialized constant Object::Date 

我應該使用的東西Time.now 和這個鏈接應該會幫助你http://pleac.sourceforge.net/pleac_ruby/datesandtimes.html

我不確定在Ruby中是否有可用的at_beginning_of_month方法,但它確實存在於RoR中。

3

對於那些有時間類工作:

class Time 
     def start_of_next_month 
       t = Time.local(self.year,self.month)+45*24*3600; 
       Time.local(t.year,t.month) 
     end 
end 

我知道這有點笨拙:)

5

我的解決辦法:

class Time 
    def start_of_next_month 
    Time.local(self.year + self.month/12, self.month % 12 + 1) 
    end 
end 
2

我想獲得今年的第一個星期一(對於導軌夾具)和以下工作:

Date.new(Date.today.year,1,1).beginning_of_week 

如果你不在軌道,它可以像下面,

# get the last day of the previous year 
d = Date.new(Date.today.year - 1,12,31) 
# advance to the next monday. This relies on w.day being 0..6, where 0 is sunday. 
first_monday = d + (8 - d.wday).days 
5

爲N個月

(Date.today + N.months).at_beginning_of_month 
0

的ActiveSupport似乎有點重量級加載此一個通用的響應。我會做這種方式:

require 'date' 
first = Date.new(Date.today.year, Date.today.month, 1) 
4.times do |m| 
    puts "Promissory note due on #{first >> (m + 1)}" 
end 
3

在您不使用rails或不希望要求active_support情況下,我發現了一個更簡單的方法,而不active_support

(Date.today - Date.today.mday + 1) # First day of the current month 
=> Thu, 01 Dec 2016 

希望這有助於! :-)

0

截至2017年11月,最新版本不再支持at_beginning_of_month。您可以改用beginning_of_month