在PHP中将oracle datetime值转换为第二个时结果为零

时间:2011-10-17 01:59:10

标签: php oracle strtotime

这是第一个代码

$sql = 'SELECT DATETIME, CURRVALUE FROM DATEVALUE';
$stid = oci_parse($conn, $sql);
oci_define_by_name($stid,'DATETIME', $agev);
oci_define_by_name($stid,  'CURRVALUE', $snv);
oci_execute($stid);
$resultXML = new SimpleXMLElement(stripslashes('<data></data>'));
while (oci_fetch($stid)) {  
      $agev = oci_result($stid, 'DATETIME');
    $snv = oci_result($stid, 'CURRVALUE');
     //settype($agev, "string"); 
    $date_2 = strtotime($agev);
    settype($date_2, "integer"); 
     //settype($snv, "float");  
    $temp = $resultXML->addChild('node'); 
    $temp->addChild('agev',$date_2);
    $temp->addChild('snv',$snv); 
} 

<node>
<agev>0</agev>
<snv>1</snv>
</node>

currvalue的结果很好但是对于datetime值它只输出零, 如果我在不使用strtotime的情况下执行addtimevalue,它将在字符串中输出datetime但它不是我需要的.... 请helppppp~.~

1 个答案:

答案 0 :(得分:2)

以下两种方法可以帮助解决问题。

首先(可能更好)方式:更改您的SQL查询。

让Oracle使用不同的格式输出日期,strtotime将识别该格式。如果DATETIME是数据库中的普通日期类型列,请考虑使用TO_CHAR Oracle函数更改其输出格式。类似的东西:

$sql = "SELECT TO_CHAR(DATETIME, 'YYYY-MM-DD HH24:MI:SS') AS DATETIME, CURRVALUE FROM DATEVALUE";

第二种方式:使用strptime

请考虑使用strptime,而不是strtotime。您在评论中显示的日期格式似乎接近:

%d-%b-%y %H.%I.%S %p

我不确定毫秒部分是否有日期格式选项。假设没有它就会正确解析它,改变行:

$date_2 = strtotime($agev);

为:

$date_2 = strptime($agev, '%d-%b-%y %H.%I.%S %p');

应该这样做。但是,如果我的假设是错误的,你仍然会收到错误。