2014-02-25 53 views
-2

所以,我想解析一個字符串,例如。 2014年1月5日,爲DATE類型,像這樣:日期解析在PHP不按預期返回

$todayArray = date_parse_from_format("n-j-Y", $row["whenn"]); 
$news_date = strtotime($todayArray['year'].'-'.$todayArray['month'].'-'.$todayArray['day']); 

但它返回爲1399909000.現在看來似乎是導致問題的數組,但我有限的PHP知識,我不知道的什麼是錯的。

謝謝你在前進,

泰勒

+3

你期待什麼價值? –

+0

2014-02-01至少對於我給出的示例 – TylerM

+3

請閱讀[strtotime'的文檔](http://php.net/strtotime)它返回自UNIX時代以來的秒數。 –

回答

2

$todayArray值應該是這樣的:

Array 
(
    [year] => 2014 
    [month] => 1 
    [day] => 5 
    [hour] => 
    [minute] => 
    [second] => 
    [fraction] => 
    [warning_count] => 0 
    [warnings] => Array 
     (
     ) 

    [error_count] => 0 
    [errors] => Array 
     (
     ) 

    [is_localtime] => 
) 

現在字符串

$todayArray['year'].'-'.$todayArray['month'].'-'.$todayArray['day'] 

"2014-1-5"是一個有效的參數爲strtotime。但函數將返回1393355280,UNIX timestamp對應於給定的日期,這不是你想要獲得的。事實上,上面的字符串已經和你想要的輸出非常相似。唯一的問題是$todayArray['month']$todayArray['day']的值需要在左側填零。這可以用sprintf可以輕鬆實現:

$news_date = $todayArray['year'].'-'.sprintf("%02d", $todayArray['month']).'-'.sprintf("%02d", $todayArray['day']); 

現在的$news_date"2014-01-05"

1

你不想使用strtotime(),因爲它只是轉換您的日期爲Unix時間戳。使用DateTime()也使得這比使用date_parse_from_format()簡單:

$date = DateTime::createFromFormat("n-j-Y", $row["whenn"]); 
echo $date->format('Y-m-d');