簡體   English   中英

字符串返回時間為空

[英]String to time returning empty

我有一個功能,可以將斜杠從用戶輸入的日期中剝離出來,使其格式為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天以上時,它將返回一個空字符串而不是一個時間戳記

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;

這是因為strtotime不接受您的時間字符串格式,然后返回false。

您可以使用DateTime :: createFromFormat替換strtotime來創建日期時間,然后使用opeator>進行比較。

如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM