[英]DB2 timestamp PHP DateTime
升级到 PHP 5.3 后,我的应用程序返回 DB2 列,时间戳类型为“2010-12-15-10.23.22.716000”。 这导致 PHP DateTime function 出现问题,因为它失败了
$time = new DateTime("2010-12-15-10.23.22.716000");
无法在 position 25 (0) 解析时间字符串 (2010-12-15-10.23.22.716000):意外字符
似乎它在 DB2 时间戳中存在精度过高的问题。 我可以以某种方式强制连接更改时间戳格式,并将数据提取到其中吗?
我正在使用 db2_connect function 连接到数据库,如下所示:
$this->connection = db2_connect ( $config ['dsn'], $config ['username'], $config ['password'] );
编辑:我想使用下面提到的解决方案,但它对我不起作用,并且在我的系统(AS400)上运行很奇怪。 我有: $timeRec = DateTime::createFromFormat('Ymdh.isu',$value);
$value = $timeRec->format('Y-m-d H:i:s');
$value = new DibiDateTime($value);
如果我在 ->format 之后执行 var_dump($value),则返回正确的字符串,但如果我尝试将此字符串提供给 DibiDateTime,则具有:
public function __construct($time = 'now', DateTimeZone $timezone = NULL)
{
if ($timezone === NULL) {
parent::__construct($time);
}
}
然后它失败了:
非对象上的 function 格式()
即使我之前检查过 var_dump($timeRec) 是正确的 DateTime object。
我认为您的函数(无论是哪个函数)都在日期字符串末尾的微秒处阻塞。 使用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)
我使用的是 PDO 和在 PHP 8.1 和 i5/OS 7.2 返回的默认时间戳格式意味着我必须使用以下格式(注意“H”为 24 小时)
$date = DateTime::createFromFormat('Y-m-d H:i:s.u', $table['TIMESTAMPCOL']);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.