检测并存储各种日期格式

时间:2013-10-04 16:21:45

标签: php date

我必须构建一个PHP脚本,它可以管理输入日期,然后以特定格式转换它(为了将其保存在MySQL数据库中),最后以与输入相同的格式输出第二个日期。

例如:

我收到日期2013-09-01,我将其转换为2013-09-01 00:00:00并将其存储在MySQL中。 然后,几天后,我必须以原始格式输出新日期(例如输入日期+2天),在这种情况下为2013-09-03

输入日期可以是各种格式,例如:

  

2013年9月29日

     

2013-09-01 23:20:05

     

2013-09-16T11:32:01 + 00:00

     

2013-09-18T13:20:02.000Z

     

2013-09-09T15:16:02

我想我必须检测输入日期格式,存储它,将日期转换为内部日期存储,最后用原始格式构建一个新日期。

我的问题是我不知道如何检测输入日期格式并将其标准化以便以后使用它。

有人对我有诀窍吗?

由于

编辑:我不再需要解决方案,API服务向我发送了一份详尽的输入日期格式列表,因此我将使用正则表达式。

2 个答案:

答案 0 :(得分:1)

我强烈建议不要让人们输入他们想要的日期格式。我认为如果你让人们自由决定他们输入日期的方式,那么很难正确地确定日期或日期格式!

strtotime()可用于将字符串转换为准备存储的UNIX时间戳 - 但它不是奇迹函数!它不会“告诉”您用户输入日期的格式,以便可以将其拆开并显示回来,并且不会接受任何日期格式。

如果他们输入'2013-01-02',那是1月2日或2月1日会发生什么?你如何“存储”原始日期格式,如果没有大量的工作,这是不可能的,即使这样,你也无法用尽所有可能的日期格式,除非你手上有很多时间。< / p>

唯一合理的方法是调整输入表单以仅接受您期望的日期格式,以标准格式将它们与您预先确定的日期格式一起存储在数据库中,然后在预定日期的页面上显示它们使用date()格式将其从UNIX时间戳转换为可读的内容。

答案 1 :(得分:0)

您可以使用strtotime。它不是一个神奇的功能,所以它不会接受任何格式。例如,你如何区分dd-mm-yyyy和mm-dd-yyyy? (strtotime假设dd-mm-yyyy)

如果您的格式是您提供的格式,而您只需要日期,那么您只需:

$date = substr($date, 0, 10);

还是太聪明了? :P