时间返回空的字符串

时间:2017-01-11 00:59:20

标签: php string datetime strtotime

我有一个函数可以删除用户日期输入中的斜杠,使其格式为ddmmYYYY

function mydate($input)
{
    $sanitized = preg_replace("/[^0-9A-Za-z\:\- ]/", "", $input);
    return $sanitized;
}

我有另一个函数检查日期是否在之后

function datebefore($before,$after)
{

    $before = substr($before,2,2)."-".substr($before,0,2)."-".substr($before,4,4);
    $after = substr($after,2,2)."-".substr($after,0,2)."-".substr($after,4,4);


    return strtotime($after)." > ".strtotime($before) ; 

    /* if(strtotime($after) < strtotime($before) )
    {
        return "The start date is after the end";
    } */
}

问题我有的是,当日期之前或之后的日期是当前日期之前的1天以上时,它返回一个空字符串而不是时间戳

2 个答案:

答案 0 :(得分:2)

strtotime取决于分隔符决定您使用的日期格式是什么。

如果分隔符为-,则它采用合理的日期格式dd/mm/yyyy,如果是/则采用美国日期格式mm-dd-yyyy

所以你的问题是你使用的分离器。将格式更改为dd-mm-yyyy并重新组织d,m和y vaues的顺序,这将是正常的

function datebefore($start,$end)
{

    $s = sprintf('%s-%s-%s',  substr($start,0,2), substr($start,2,2), substr($start,4,4));
    $e = sprintf('%s-%s-%s', substr($end,0,2), substr($end,2,2), substr($end,4,4));

    return strtotime($s) > strtotime($e) 
                ? 'The start date is after the end' 
                : 'The start date is before the end'; 
}

function mydate($input)
{
    $sanitized = preg_replace("/[^0-9A-Za-z\:\- ]/", "", $input);
    return $sanitized;
}

$s = mydate('10/12/2016');
echo $s . PHP_EOL;
$e = mydate('06/12/2016');
echo $e . PHP_EOL;

$c = datebefore($s, $e);
echo $c;

答案 1 :(得分:0)

这是因为strtotime不接受你的时间字符串格式,然后它返回false。

您可以使用DateTime::createFromFormat替换strtotime来创建日期时间,然后使用opeator&gt;比较。

为:

var_dump(DateTime::createFromFormat('dmY', '11012017'));