首先是代码
$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>
对于currenvalue的结果是好的,但是对于datetime值它只输出零。如果我做addtimevalue不使用strtotime它会输出日期时间字符串,但它不是我需要....
有两种方法可以帮助解决这个问题。
第一个(可能更好)的方法:改变你的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');
应该做这件事。但是,如果我的假设是错误的,您仍然会得到一个错误。