0

我在 php 中有以下 DateTime 对象:

[start1] => DateTime Object ( 
    [date] => 2012-05-21 12:59:59
    [timezone_type] => 3
    [timezone] => Europe/Berlin
)

[end1] => DateTime Object ( 
    [date] => 2012-05-21 22:36:00
    [timezone_type] => 3
    [timezone] => Europe/Berlin
)

和结果:

$time->end1->diff($time->start1

是:

DateInterval Object ( [y] => 0 [m] => 0 [d] => 0 [h] => 12 [i] => 36 [s] => 2 [invert] => 1 [days] => 0 )

为什么我得到的是 12 小时而不是 9 小时?

4

2 回答 2

2

我找到了解决方案......在做差异之前,我在 start1 对象上做了一个 sub() 。现在我明白了为什么我的结果是错误的......这是答案,但我真的不知道为什么会发生这种情况。 http://www.php.net/manual/en/datetime.sub.php#101175

于 2012-05-22T07:57:04.567 回答
0

我知道这实际上可能是您创建两个 DateTime 对象所做的事情,但我想我会把对我有用的东西放在上面,看看它是否能帮助你。

要创建我所做的两个对象:

$start1 = new DateTime('2012-05-21 12:59:59', new DateTimeZone('Europe/Berlin'));
$end1   = new DateTime('2012-05-21 22:36:00', new DateTimeZone('Europe/Berlin'));

并打印出两个对象和差异:

print_r($end1->diff($start1));

我有:

DateTime Object
(
    [date] => 2012-05-21 12:59:59
    [timezone_type] => 3
    [timezone] => Europe/Berlin
)
DateTime Object
(
    [date] => 2012-05-21 22:36:00
    [timezone_type] => 3
    [timezone] => Europe/Berlin
)
DateInterval Object
(
    [y] => 0
    [m] => 0
    [d] => 0
    [h] => 9
    [i] => 36
    [s] => 1
    [invert] => 1
    [days] => 0
)

我看到 start1 和 end1 对象的两个输出是相同的,但我的差异反映了正确的 9 小时差异。也许您在您的 PHP 版本中创建 DateTime 对象的方式有些奇怪?

于 2012-05-21T16:28:04.750 回答