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');

任何帮助深表感谢。

4

2 回答 2

1

日期/时间10:15:41 01/03/13格式无效

改为使用DateTime::createFromFormat

于 2013-02-23T13:26:41.570 回答
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 日。

换句话说,为了确保我们每次都能得到正确的日期,我们必须更加具体。date_create_from_format('H:i:s m/d/y', $_date)如果给定的日期确实是“H:i:sm/d/y”格式,将为您提供与正确日期相对应的 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;
}

希望有帮助!

于 2013-02-23T13:26:23.760 回答