以PHP格式输入和验证自定义日期时间的最佳方法

时间:2009-08-01 13:13:28

标签: php datetime sqlite

就前端可用性和PHP DATE_TIME验证而言,这是一个双重问题。

我正在为一个想要添加项目完成日期的客户的网站工作(因此可以按顺序列出项目)。他将是唯一一个使用管理界面的人,所以我希望它尽可能简单。

我将日期存储为SQLite数据库中的DATE_TIME。

我想要求客户输入至少年份和月份,并选择将日,小时,分钟,秒添加到DATE_TIME。如果未设置,则默认为最小数字。

我认为最好的方法也是最容易做到这一点的方法是输入一个输入表单(左)并输出结果(右)。 让他使用xxxx / xx / xx / xx / xx / xx作为格式。

2009/08       = 2009-08-01 00:00:01
2009/08/01    = 2009-08-01 00:00:01
2009/08/01/05 = 2009-08-01 05:00:01

(默认情况下增加一秒,否则将是前一天)

我首先尝试将输入扩展为数组并使用正则表达式验证每个日期部分。它真的很乱,并且我无法弄清楚如何验证适当的范围,比如/ [1980-2009] /或/ [01-12] /(这不像我预期的那样工作)。此外/ [(0-9){2}] /显然不适用于本月。

另一个选项是使每个日期部分成为单独的选择字段。使每个字段在一个月后可选。但是在html输出中变得混乱,同样假设每个月没有31天,我需要一些javascript来改变日期字段,具体取决于选择的月份。这太多了。使用单个字段似乎也更容易,更快。

你们建议什么是输入和验证自定义日期时间的最佳方式?

1 个答案:

答案 0 :(得分:8)

我建议在约会时调用strtotime(),这样他就可以输入各种日期格式,包括月/年,日/月/年,日/月/年小时:分钟,以及年 - 月 - 小时:分钟

如果strtotime无法确定日期是什么,则返回false(在旧版本的PHP中为-1,请查看您的手册)。所以你的一般代码是:

  1. 通过stripslashes(如果需要)和strtotime
  2. 运行输入
  3. 检查值是否为=== false。如果是,则显示错误
  4. 否则,请按照数据库预期使用date()
  5. 格式化时间