在 PHP 中将 Oracle 日期时间值转换为秒时结果为零
这是代码,
$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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这里有两种方法可以帮助解决这个问题。
第一种(可能更好)方法:更改 SQL 查询。
让 Oracle 使用不同的格式输出日期,
strtotime
可以识别该格式。如果 DATETIME 是数据库中的普通日期类型列,请考虑使用TO_CHAR
Oracle 函数更改其输出格式。类似于:第二种方式:使用
strptime
。不要使用
strtotime
,而是考虑使用strptime。您在评论中显示的日期格式似乎接近:我不确定毫秒部分是否有日期格式选项。假设它能够正确解析它,则将行:更改
为:
应该可以。不过,如果我的假设是错误的,你仍然会得到一个错误。
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 theTO_CHAR
Oracle function to change its output format. Something like:Second way: use
strptime
.Instead of using
strtotime
, consider using strptime. The date format you show in your comments appears to be close to: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:
to:
should do it. You'll still get an error, though, if my assumption is wrong.