"date" 数据类型的正确格式是什么?
What's the proper format for the "date" datatype?
我的模型 "User" 有一个日期属性 :birthday
。但是,如果我提交 x/x/x
以外的任何格式的生日,它就会变成零。因此,例如,1/1/1
变为“0001-01-01”,但 1/1/15
变为 nil。 1/1/2
变为“0001-01-02”,但 22/1/3
变为零。
我觉得我在这里遗漏了什么。日期属性不可能只能是x/x/x
吧?
你是怎么设置日期的?是不是有点像 @user.birthday = params[:birthday]
?这会给你带来问题,因为它不是日期,它是一个字符串,并且是一个与你的数据库存储日期的格式不同的字符串。
您有两个选择:
A) 理想情况下,您应该将输入转换为日期,然后使用实际日期对象设置字段。
B) 确保您的参数格式与您的数据库存储日期的方式匹配(从外观上看是 "yyyy-mm-dd")。
A最好。我会重写 User#birthday= 方法来尝试让它尽可能有用地处理日期。例如
#in User model
def birthday=(arg)
if arg.is_a?(Date)
self[:birthday] = arg
elsif arg =~ /\d+\/\d+\/\d+/
self[:birthday] = Date.strptime(arg, "%d/%m/%y")
elsif arg =~ /\d+\-\d+\-\d+/
self[:birthday] = Date.strptime(arg, "%y/%m/%d")
else
self[:birthday] = arg
end
end
我的模型 "User" 有一个日期属性 :birthday
。但是,如果我提交 x/x/x
以外的任何格式的生日,它就会变成零。因此,例如,1/1/1
变为“0001-01-01”,但 1/1/15
变为 nil。 1/1/2
变为“0001-01-02”,但 22/1/3
变为零。
我觉得我在这里遗漏了什么。日期属性不可能只能是x/x/x
吧?
你是怎么设置日期的?是不是有点像 @user.birthday = params[:birthday]
?这会给你带来问题,因为它不是日期,它是一个字符串,并且是一个与你的数据库存储日期的格式不同的字符串。
您有两个选择:
A) 理想情况下,您应该将输入转换为日期,然后使用实际日期对象设置字段。
B) 确保您的参数格式与您的数据库存储日期的方式匹配(从外观上看是 "yyyy-mm-dd")。
A最好。我会重写 User#birthday= 方法来尝试让它尽可能有用地处理日期。例如
#in User model
def birthday=(arg)
if arg.is_a?(Date)
self[:birthday] = arg
elsif arg =~ /\d+\/\d+\/\d+/
self[:birthday] = Date.strptime(arg, "%d/%m/%y")
elsif arg =~ /\d+\-\d+\-\d+/
self[:birthday] = Date.strptime(arg, "%y/%m/%d")
else
self[:birthday] = arg
end
end