使用PHP进行高级日期验证

Sam*_*son 5 php validation date

我必须用我当前的项目来验证很多日期.不幸的是,这些日期可能会有很大差异.例子包括:

  1. 1983-07-10(1970年以后)
  2. 1492-10-11(1970年之前,Unix时间戳的年份 - 这在一些系统上消除了strtotime())
  3. 公元前200年(真的很老......)

日期不会超过公元前9999年,也不会超过未来(超出"今天").验证提交的值确实是日期和适当日期的最佳方法是什么?

更新...

所有日期必须在其全局列表中排序.上面的含义日期1和3必须相互比较,并对ASC或DESC进行排序.

我完全了解过去发生的日历变化,以及围绕这些变化的混乱.我的项目假定用户已经执行了适当的校准,以根据我们的现代日历系统找出日期.我不会为他们执行此校准.

Tim*_*ter 5

一系列精心编写的正则表达式如何识别每种可能的格式.一旦知道格式,就可以验证并将其置于统一表示中(例如,64位time_t).

例如,

/(\d{4})-(\d{2})-(\d{2})/
/(\d+)(bc|b.c.|bce|b.c.e)/i
etc.
Run Code Online (Sandbox Code Playgroud)

由于听起来每个表单都有自己的验证规则,并且您没有实现任何广泛使用的标准,我认为您无法单独验证每个表单.

更新:

所有日期必须在其全局列表中排序.

在我看来,为了能够对以不同格式出现的日期进行排序,您需要在内部对每个日期进行统一表示,如前所述.例如,使用多键字典(C++中的std :: multimap,不确定PHP)来存储(统一表示) - >(输入表示)映射.根据容器的实现,您可以免费获得反向查找或密钥排序.