在 PHP 中将 Oracle 日期时间值转换为秒时结果为零

发布于 2024-12-10 02:49:14 字数 878 浏览 0 评论 0原文

这是代码,

$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 的第一个结果很好,但对于日期时间值,它仅输出零, 如果我在不使用 strtotime 的情况下添加时间值,它将在字符串中输出日期时间,但这不是我需要的...... 请大家帮忙~.~

here is the code first

$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>

result for currvalue is good but for datetime value it output zero only,
if i do addtimevalue without using strtotime it will output datetime in string but its not what i need....
please helppppp ~.~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

辞别 2024-12-17 02:49:14

这里有两种方法可以帮助解决这个问题。

第一种(可能更好)方法:更改 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');

应该可以。不过,如果我的假设是错误的,你仍然会得到一个错误。

Here are two ways that could help fix the problem.

First (possibly better) way: Change your SQL query.

Have Oracle output the date using a different format, one that strtotime will recognize. If DATETIME is a normal date-type column in your database, consider using the TO_CHAR Oracle function to change its output format. Something like:

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

Second way: use strptime.

Instead of using strtotime, consider using strptime. The date format you show in your comments appears to be close to:

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

I'm not sure if there's a date format option for the milliseconds part. Assuming it will parse it correctly without that, changing the line:

$date_2 = strtotime($agev);

to:

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

should do it. You'll still get an error, though, if my assumption is wrong.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文