对我发现valid_date的日期进行一些验证?如果日期是在将来(当前日期之后的日期)但所有其他日期都是真的,则给我一个假值。
示例:
这些返回true:
valid_date? DateTime.strptime(DateTime.yesterday.strftime("%m-%d-%Y"), "%m-%d-%Y")
valid_date? DateTime.strptime(DateTime.now.strftime("%m-%d-%Y"), "%m-%d-%Y")
但是这会返回false
valid_date? DateTime.strptime(DateTime.tomorrow.strftime("%m-%d-%Y"), "%m-%d-%Y")
有人可以解释原因吗?
答案 0 :(得分:2)
valid_date?
最常见的用途是将正在发生或发生的日期附加到模型中。
因此,未来的日期并不合适,因为它还没有发生!
[编辑]
如果您使用DateTime
来构建日期,那么它将为您提供有效的DateTime
。
要解析用户输入的日期,请使用DateTime.strptime
或DateTime.parse
,您甚至可以使用前者设置格式。
如果解析失败(无效DateTime
),它将为您提供nil
。
关于ActiveRecord
的好消息,如果你的模型知道该字段应该是DateTime
,则状态验证器应该足够,因为它会尝试为你解析字符串。