首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在php中验证日期格式

在php中验证日期格式
EN

Stack Overflow用户
提问于 2010-01-18 22:20:04
回答 7查看 16.8K关注 0票数 15

我正在尝试使用PHP验证日期。

我希望以下格式有效:

d/m/yy
d/m/yyyy
dd/m/yy
dd/m/yyyy
d/mm/yy
d/mm/yyyy
dd/mm/yy
dd/mm/yyyy

我尝试过许多正则表达式和checkdate()函数的不同变体。目前我有这样的东西:

function _date_is_valid($str)
{
     if(strlen($str) == 0)
         return TRUE;
     if(substr_count($str,'/') == 2)
     {
         if (preg_match("/^((((31\/(0?[13578]|1[02]))|((29|30)\/(0?[1,3-9]|1[0-2])))\/(1[6-9]|[2-9]\d)?\d{2})|(29\/0?2\/(((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))|(0?[1-9]|1\d|2[0-8])\/((0?[1-9])|(1[0-2]))\/((1[6-9]|[2-9]\d)?\d{2}))/", $str))
         {
             $datearray = explode('/',$str);
             if($datearray[2] > 2030)
                 return FALSE;
             return checkdate($datearray[1], $datearray[0], $datearray[2]);
         } 
         else 
         {
             return FALSE;
         }
     }
     return FALSE;
}

但是,这验证了日期,如11/11/200和11/11/200#

如何验证日期以匹配所需的格式?

编辑:我可以检查datearray2在10和30之间,2010和2030之间。但是有没有办法使用正则表达式来检查它呢?

Edit1:在strlen($str) == 0上返回TRUE是因为我希望用户能够在不知道事件何时发生的情况下添加事件,以便其他人可以限定计划并在以后将事件分配到某个日期

只是为了记录在案。我最终做了:

function _date_is_valid($str)
{
    if(strlen($str) == 0) //To accept entries without a date
        return TRUE;
    if(substr_count($str,'/') == 2)
    {
        list($d,$m,$y) = explode('/',$str);
        if(($y >= 10 && $y <= 30) || ($y >= 2010 && $y <= 2030))
        {
            return checkdate($m,$d,$y);
        }
    }
    return FALSE;
}

感谢你所有的回答

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-01-18 22:28:45

function _date_is_valid($str) {
    if (substr_count($str, '/') == 2) {
        list($d, $m, $y) = explode('/', $str);
        return checkdate($m, $d, sprintf('%04u', $y));
    }

    return false;
}
票数 24
EN

Stack Overflow用户

发布于 2010-01-18 22:24:54

如果它始终是date / month / year,则可以使用checkdate

function _date_is_valid($str)
{
    $array = explode('/', $str);

    $day = $array[0];
    $month = $array[1];
    $year = $array[2];

    $isDateValid = checkdate($month, $day, $year);
    return $isDateValid;
}
票数 8
EN

Stack Overflow用户

发布于 2013-03-25 22:15:13

一种简单的方法来完成此操作

<?php
    if(!$formated_date = date_create_from_format('Y-m-d',$dateVar))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2086598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档