如何在PHP中检查Date的格式?

时间:2015-06-15 12:52:26

标签: php

我的SQL服务器使用mm/dd/yyyy日期格式,但我使用jQuery实现的日期选择器将日期格式设为dd/mm/yyyy

所以我对此进行编码以检查给定输入是否为mm/dd/yyyy格式,但无论给出日期输入的格式如何,它都会计算为真.PHP代码是,

$Temp = DateTime::createFromFormat('d/m/Y', $StartsOn);
    if($Temp) 
        $Temp->format('m/d/Y');

仅当输入位于mm/dd/yyyy时,我才需要转换为dd/mm/yyyy格式。所以请告诉我我的代码中出现了什么逻辑错误。

3 个答案:

答案 0 :(得分:2)

无法可靠地检查日期是dd/mm/yyyy还是mm/dd/yyyy格式。只要考虑一下约会,就像" 5月7日" 这将是07/05/201505/07/2015,具体取决于格式。因此,如果您刚收到没有其他信息的日期字符串,则无法判断05/07/2015May, 7th还是July, 5th
对不起,但是你的问题没有合理的解决办法。

答案 1 :(得分:0)

您可以在PHP.net中使用此功能的修改版本。它使用DateTime类:

function validateDate($date)
{
    $d = DateTime::createFromFormat('d/m/Y', $date);
    return $d && $d->format('d/m/Y') == $date;
}

if(validateDate($StartsOn)){
//do job
}

函数已从此answerphp.net

复制

答案 2 :(得分:0)

来自PHP manual on strtotime

  

通过查看,可以消除m / d / y或d-m-y格式的日期   各个组件之间的分隔符:如果分隔符是a   斜线(/),然后是美国m / d / y;而如果   separator是短划线( - )或点(。),然后是欧洲d-m-y格式   假设。为避免潜在的歧义,最好使用ISO 8601   (YYYY-MM-DD)日期或DateTime :: createFromFormat()尽可能。

将日期传递给SQL服务器的原因是mm / dd / yyyy是因为分隔符。在可能的情况下,最好按照ISO 8601传递YYYY-MM-DD,这是为了这个目的而创建的。要解决您的问题,最好的办法是更改jQuery插件配置以输出该格式的数据(如果不可能,请将/字符串替换为-来自jQuery插件。通过编写代码来修复日期格式,这将避免将来的复杂化。

当你不知道它来自哪里时,你将无法区分mm / dd / yyyy和dd / mm / yyyy。