使用php从Oracle数据库获取时将时间戳转换为Unix时间戳

时间:2015-09-23 17:11:47

标签: php oracle unix-timestamp

我正在尝试使用php从oracle数据库获取date-with-time(时间戳)。

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

我收到以下输出=&gt;

[[false,15.739993],[false,13.698263],[false,13.214383],.....]

如果我使用

while($row = oci_fetch_array($stid,OCI_ASSOC)){

  $arr[] = array($row['WDAT'] , (float)$row['DATA']);

}

然后获得以下输出=&gt;

[["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],......]

无法弄清楚我怎么能得到它?请帮忙

1 个答案:

答案 0 :(得分:1)

看起来你需要结合你建议的两个例子。在使用'WDAT'

的$ row索引时,您在第二次尝试时缺少strtotime

第二个问题是db返回的时间戳没有被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