如何在Rails控制台中保存日期

8

我有一张表格,其中包含一个日期字段。如何使用控制台保存日期?我尝试了以下代码:

event = Event.create(name:"Concert", date: '2016-08-20', location:'Portland', state:'OR')

但是,我得到了一个无效的八进制数字错误。


2
您的日期不是字符串,因此被解析为数字。以0开头的数字被解释为八进制数,而8在那里不是有效的数字。 - Michael Kohl
3个回答

12

你需要传入一个实际的Date对象,你可以使用Date.parse方法从字符串中获取它:

event = Event.create(name: "Concert", date: Date.parse('2016-08-20'), location: 'Portland', state: 'OR')
请注意,我已经将您的日期重写为不同格式。 MM / DD / YYYY 格式在不同的语言环境中 具有可移植性,因此我强烈建议您使用 YYYY-MM-DD (ISO 8601 格式)。

3
使用正确格式的字符串就可以解决问题。例如:
>> foo = Foo.create date: "20/8/2016"
   (0.0ms)  begin transaction
  SQL (1.0ms)  INSERT INTO "foos" ("date") VALUES (?)  [["date", Sat, 20 Aug 2016]]
   (0.9ms)  commit transaction
#<Foo id: 1, date: "2016-08-20">
>> foo.date
Sat, 20 Aug 2016

ActiveSupport提供了对字符串类的核心扩展,用于将字符串转换为日期、时间和日期时间。在Rails控制台中进行测试时,这可能是可以接受的,并且更方便。

在应用程序本身中利用该扩展(而不是使用 Date.parse 显示解析)完全取决于您和您的团队。

源代码中:

"1-1-2012".to_date   # => Sun, 01 Jan 2012
"01/01/2012".to_date # => Sun, 01 Jan 2012
"2012-12-13".to_date # => Thu, 13 Dec 2012
"12/13/2012".to_date # => ArgumentError: invalid date

为了全面,以下是String#to_time的示例:

"13-12-2012".to_time               # => 2012-12-13 00:00:00 +0100
"06:12".to_time                    # => 2012-12-13 06:12:00 +0100
"2012-12-13 06:12".to_time         # => 2012-12-13 06:12:00 +0100
"2012-12-13T06:12".to_time         # => 2012-12-13 06:12:00 +0100
"2012-12-13T06:12".to_time(:utc)   # => 2012-12-13 06:12:00 UTC
"12/13/2012".to_time               # => ArgumentError: argument out of range

并且,String#to_datetime方法:
"1-1-2012".to_datetime            # => Sun, 01 Jan 2012 00:00:00 +0000
"01/01/2012 23:59:59".to_datetime # => Sun, 01 Jan 2012 23:59:59 +0000
"2012-12-13 12:50".to_datetime    # => Thu, 13 Dec 2012 12:50:00 +0000
"12/13/2012".to_datetime          # => ArgumentError: invalid date

2
例如,尝试这个:

试试看这个:

date = Date.parse('3rd Feb 2001')  ####=> #<Date: 2001-02-03 ...>

Reference: Date class


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接