2013-02-23 184 views
0

我對這段代碼有疑問,我正在從不同的腳本中重用它,它正在讀取一個xml文件並從一個節點轉換日期/時間。在該節點的日期如下:這是原來的劇本,唯一的區別:轉換時間戳

<od>10:15:41 01/03/13</od> 

我想我有這個修改正確,但它不工作:

$_date=$record->getElementsByTagName("od"); 
$_date=((!empty($_date))?$_date->item(0)->nodeValue:""); 
if(strpos($_date,".")!==false) 
{ 
    $_date=substr($_date,0,strpos($_date,".")); 
} 
$_date=date("H:i:s m/d/Y",strtotime($_date)); 
$_date.=(trim($_date)!="")?"Z":""; 
xmlrpc_set_type($_date, 'datetime'); 

任何幫助是多少讚賞。

+0

XML文件中的格式是什麼,它與您將其轉換爲什麼格式不同?看來你的功能應該起作用。 – sjdaws 2013-02-23 13:18:16

+0

爲了回答這個問題,我們必須猜測'$ record'是什麼。請向我們展示相關的XML代碼。 – 2013-02-23 13:21:25

+0

該節點是 10:15:41 01/03/13 csuk1 2013-02-23 13:22:24

回答

0

strftime將以Y-m-d H:i:s格式正常工作,因爲它是明確的。

另一方面,它與H:i:s m/d/y混淆,因爲它可以解釋爲H:i:s d/m/Y。考慮日期02/03/2013 - m/d/y表示它是2月3日,而d/m/Y表明它是3月2日。

換句話說,爲了確保我們每次都能得到正確的日期,我們必須更具體。如果給定的日期確實是'H:i:s m/d/y'格式,那麼date_create_from_format('H:i:s m/d/y', $_date)會給你一個對應於正確日期的DateTime對象。

// Retrieve the date string 
$_date=$record->getElementsByTagName("od"); 
$_date=((!empty($_date))?$_date->item(0)->nodeValue:""); 

// Standardize it 
$_date = get_date($_date); 
$_date .= (trim($_date) != "") ? "Z" : ""; 
xmlrpc_set_type($_date, 'datetime'); 



function get_date($rawDate) { 

    // Clean date string 
    if(strpos($rawDate,".")!==false) { 
     $rawDate=substr($rawDate,0,strpos($rawDate,".")); 
    } 


    // Attempt converting from m/d/y AND m/d/Y formats 
    $date = date_create_from_format('H:i:s m/d/y', $rawDate); 
    if(false === $date) $date = date_create_from_format('H:i:s m/d/Y', $rawDate); 

    if(!empty($date)) { 
     return $date->format('H:i:s m/d/Y'); // Convert the date to a string again 
    } 


    // If neither works, try using strtotime instead 
    $date = @strtotime($rawDate); 
    $date = !empty($date) ? date('H:i:s m/d/y', $date) : false; 


    return $date; 
} 

希望有幫助!

+0

感謝您的幫助,雖然我得到了「致命錯誤:調用一個非對象的成員函數格式()」on「$ _date = $ _date-> format('H:i:sm/d/Y'); //將日期再次轉換爲一個字符串「 – csuk1 2013-02-23 13:33:39

+0

這應該可以做到 - date_create_from_format格式字符串('H:i:sm/d/y')需要一個小寫字母,而不是大寫字母Y. – adomnom 2013-02-23 13:39:16

+0

不是,仍然拋出錯誤,我試過所有的大寫和小寫變體,每次都得到錯誤 – csuk1 2013-02-23 14:23:08