为什么是valid_date?现在是真的,但明天是假的?

时间:2016-05-31 14:01:31

标签: ruby-on-rails ruby

对我发现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")

有人可以解释原因吗?

1 个答案:

答案 0 :(得分:2)

valid_date?最常见的用途是将正在发生或发生的日期附加到模型中。 因此,未来的日期并不合适,因为它还没有发生!

[编辑]

用于验证未来日期:

如果您使用DateTime来构建日期,那么它将为您提供有效的DateTime

要解析用户输入的日期,请使用DateTime.strptimeDateTime.parse,您甚至可以使用前者设置格式。 如果解析失败(无效DateTime),它将为您提供nil

关于ActiveRecord的好消息,如果你的模型知道该字段应该是DateTime,则状态验证器应该足够,因为它会尝试为你解析字符串。