2012-09-29 212 views
2

升级到PHP 5.3后,我的应用程序正在返回时间戳类型为“2010-12-15-10.23.22.716000”的DB2列。 这是PHP日期时间函数引起问题,因为它不能与DB2时间戳PHP日期时间

$时间=新的datetime( “2010-12-15-10.23.22.716000”);

解析失败在位置25(0)的时间字符串(2010-12-15-10.23.22.716000):意外字符

似乎有与DB2时间戳太多的精度问题的。 我可以以某种方式强制连接更改时间戳格式,它正在将数据提取到?

我连接到数据库像这样db2_connect功能:

$这 - >连接= db2_connect($配置[ 'DSN'],$配置[ '用户名'],$配置['密码']);

编辑: 我想用以下提到的解决方案,但它不是为我工作,我的系统(AS400)运行很怪。 我有: $ timeRec = DateTime :: createFromFormat('Y-m-d-h.i.s.u',$ value);

$value = $timeRec->format('Y-m-d H:i:s'); 

$value = new DibiDateTime($value); 

如果我做的var_dump后($值) - >格式,正确的字符串返回,但如果我尝试喂这个字符串DibiDateTime,具有:

public function __construct($time = 'now', DateTimeZone $timezone = NULL) 
{  
    if ($timezone === NULL) { 
     parent::__construct($time); 
    } 
} 

那么它失败:

函数格式()非对象上

即使我检查befor e与var_dump($ timeRec)是适当的DateTime对象。

+1

的PHP日期时间函数?如果你想让你的问题更具说话性,你应该添加这行代码。你如何访问数据库? – hakre

回答

5

我认为你的函数(无论它是什么)在你的日期字符串结尾的微秒处窒息。使用DateTime::createFromFormat()函数来处理这个问题,使用'u'微秒标记。看到这里http://php.net/manual/en/function.date.php

$time = DateTime::createFromFormat('Y-m-d-h.i.s.u', '2010-12-15-10.23.22.716000'); 
var_dump($time); 

输出我的系统上: -

object(DateTime)[1] 
    public 'date' => string '2010-12-15 10:23:22' (length=19) 
    public 'timezone_type' => int 3 
    public 'timezone' => string 'UTC' (length=3)