42

如何在给定日期的 IRB 中创建一个新的 Date 对象。以下没有奏效。

1.9.3p194 :053 > require 'active_support'
 => true 
1.9.3p194 :054 > Date.new
 => #<Date:0x9d80730> 
1.9.3p194 :055 > Date.parse('12/01/2012')
NoMethodError: undefined method `parse' for Date:Class
        from (irb):55

1.9.3p194 :055 > Date.new('12/01/2012')
ArgumentError: wrong number of arguments(1 for 0)
4

7 回答 7

50

根据日期文档

require 'date'

Date.new(2001,2,25)           #=> #<Date: 2001-02-25 
Date.jd(2451966)             #=> #<Date: 2001-02-25 
Date.ordinal(2001,56)        #=> #<Date: 2001-02-25 
Date.commercial(2001,8,7)    #=> #<Date: 2001-02-25 
Date.parse('2001-02-25')     #=> #<Date: 2001-02-25 
Date.strptime('25-02-2001', '%d-%m-%Y') #=> #<Date: 2001-02-25 
Time.new(2001,2,25).to_date   #=> #<Date: 2001-02-25 
于 2012-09-22T14:30:53.717 回答
5
1.9.3-p125 :012 > require 'date'
 => true 
1.9.3-p125 :013 > Date::new(2012,02,03)
 => #<Date: 2012-02-03 ((2455961j,0s,0n),+0s,2299161j)> 
1.9.3-p125 :014 > 
于 2012-09-22T14:28:35.400 回答
3

我发现以下内容比以下更容易记住Date.new

require 'active_support/core_ext/string'
'2019-03-31'.to_date
=> #<Date: 2019-03-21 ((2458564j,0s,0n),+0s,2299161j)>

请参阅https://apidock.com/rails/String/to_date

于 2019-03-06T21:12:43.707 回答
1

如果您尝试在 Rails 之外获取对 Date 的 active_support 扩展,则必须使用 core_ext 模块:

require 'active_support/core_ext/date/calculations'
Date.parse('12/01/2012')
=> #<Date: 2012-01-12 ((2455939j,0s,0n),+0s,2299161j)>

此 Rails 指南中的更多信息:http: //edgeguides.rubyonrails.org/active_support_core_extensions.html

于 2012-09-22T14:36:27.070 回答
0
Date.strptime("2012-09-21 19:45:48","%Y-%m-%d %H:%M:%S")
于 2012-09-22T14:30:51.497 回答
0

您需要使用 Ruby 标准库中的日期扩展名。文档中的大多数示例并不总是显示您需要它。

require 'date'

是你需要的。它不是一组内置的类或模块。

你得到两个类加上那个,

Date
DateTime

有了它,您现在可以使用文档中的信息

于 2017-01-09T17:44:21.280 回答
0
require 'date'
Date::strptime("29-05-2017", "%d-%m-%Y")

因此,您需要在代码中包含此日期模块,然后使用strptime方法,您可能会注意到其中的年份,我使用了大写Y,因为全年作为 strptime 方法的第一个参数输入。如果日期类似于“29-05-17”,您可以使用小y 。

于 2017-05-29T06:31:54.000 回答