результат равен нулю при преобразовании значения oracle datetime в секунду в php
Вот первый код
$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 он выводит только ноль, если я добавлю значение timevalue без использования strtotime, оно будет выводить значение datetime в строке, но это не то, что мне нужно.... пожалуйста, помогите ~.~
1 answers
Вот два способа, которые могут помочь решить проблему.
Первый (возможно, лучший) способ: Измените свой SQL-запрос.
Попросите Oracle вывести дату в другом формате, который strtotime
распознает. Если DATETIME является обычным столбцом типа даты в вашей базе данных, рассмотрите возможность использования функции TO_CHAR
Oracle для изменения ее выходного формата. Что-то вроде:
$sql = "SELECT TO_CHAR(DATETIME, 'YYYY-MM-DD HH24:MI:SS') AS DATETIME, CURRVALUE FROM DATEVALUE";
Второй способ: используйте strptime
.
Вместо использования strtotime
рассмотрите возможность использования strptime. Формат даты, который вы показываете в своих комментариях, кажется близким к:
%d-%b-%y %H.%I.%S %p
Я не уверен, есть ли опция формата даты для части миллисекунд. Предполагая, что он правильно проанализирует его без этого, изменив строку:
$date_2 = strtotime($agev);
Кому:
$date_2 = strptime($agev, '%d-%b-%y %H.%I.%S %p');
Должен это сделать. Однако вы все равно получите ошибку, если мое предположение неверно.