【问题标题】:DB2 timestamp PHP DateTimeDB2 时间戳 PHP DateTime
【发布时间】:2012-09-29 15:34:42
【问题描述】:

升级到 PHP 5.3 后,我的应用程序返回时间戳类型为“2010-12-15-10.23.22.716000”的 DB2 列。 这导致 PHP DateTime 函数出现问题,因为它失败了

$time = new DateTime("2010-12-15-10.23.22.716000");

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

DB2 时间戳的准确性似乎有问题。 我可以以某种方式强制连接更改时间戳格式,并将数据提取到其中吗?

我正在使用 db2_connect 函数连接到数据库,如下所示:

$this->connection = db2_connect ($config ['dsn'], $config ['username'], $config ['password'] );

编辑: 我想使用下面提到的解决方案,但它对我不起作用,并且在我的系统(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);

如果我在 ->format 之后执行 var_dump($value),则返回正确的字符串,但如果我尝试将此字符串提供给 DibiDateTime,则有:

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

然后它失败了:

非对象上的函数 format()

即使我之前检查过 var_dump($timeRec) 是正确的 DateTime 对象。

【问题讨论】:

  • 哪个 PHP 日期时间函数?如果你想让你的问题更有说服力,你应该添加那行代码。以及如何访问数据库?

标签: php datetime db2 timestamp


【解决方案1】:

我认为您的函数(无论它是什么)在您的日期字符串末尾的微秒内阻塞。使用 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)

【讨论】:

    猜你喜欢
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 2015-01-26
    • 1970-01-01
    • 2012-10-07
    • 2011-05-18
    相关资源
    最近更新 更多