Используя php, преобразуйте метку времени в метку времени Unix при извлечении из базы данных Oracle
Я пытаюсь получить дату со временем (метку времени) из базы данных oracle с помощью php.
<?php
include("mydb.php");
// run query
$sql = "select WDAT,DATA from xet ";
$stid=oci_parse($conn, $sql);
// set array
$arr = array();
if(!$stid){
$e=oci_error($conn);
trigger_error(htmlentities($e[message],ENT_QUOTES),E_USER_ERROR);
}
$r=oci_execute($stid);
if(!$r){
$e=oci_error($stid);
trigger_error(htmlentities($e[message],ENT_QUOTES),E_USER_ERROR);
}
// look through query
while($row = oci_fetch_array($stid,OCI_ASSOC)){
$arr[] = array(strtotime($row['WDAT']) , (float)$row['DATA']);
}
// debug:
echo json_encode($arr);
Я получаю следующий вывод=>
[[false,15.739993],[false,13.698263],[false,13.214383],.....]
Если я использую
while($row = oci_fetch_array($stid,OCI_ASSOC)){
$arr[] = array($row['WDAT'] , (float)$row['DATA']);
}
Затем получаем следующий вывод=>
[["25-FEB-15 12.14.00.000000 AM",15.739993],["25-FEB-15 12.33.00.000000 AM",13.698263],.....]
Но я хочу, чтобы результат был
[[1424823240,15.739993],[1424824380,13.698263],......]
Не могу понять, как я могу это получить? пожалуйста, помогите
2
1 answers
Похоже, вам нужно объединить оба предложенных примера. Вы пропускаете strtotime со второй попытки при использовании индекса $row 'WDAT'
Вторая проблема заключается в том, что метка времени, возвращаемая бд, неправильно анализируется strtotime, поэтому она возвращает значение false. Это делается для полной отметки времени, включая AM/PM в конце (даже если это 24-часовое время). Мы можем обойти это, удалив его следующим образом:
<?php
while($row = oci_fetch_array($stid,OCI_ASSOC)){
$formattedDate = str_replace( array('AM', 'PM'), '', $row['WDAT']);
$arr[] = array(strtotime($formattedDate) , (float)$row['DATA']);
}
Вот скрипка http://phpfiddle.org/lite/code/11tc-9was
1
Author: Chizzle, 2015-09-23 20:06:45