PHP DateTime类的奇怪行为

时间:2012-03-11 09:51:54

标签: php datetime php-5.3 intervals datediff

我正试图以毫秒为单位获得时差。

$_SESSION['startTime'] = time();
$to_time = time();

//I call the code from here after a delay, say 4 seconds

$from_time = $_SESSION['startTime'];
$d1 = new DateTime($from_time);
$d2 = new DateTime($to_time);


print_r( $d1->diff($d2));

我在4秒后打印结果,结果有点像这样:

DateInterval Object
(
    [y] => 4 //---- Problem, this value should be +
    [m] => 0 //                                   |
    [d] => 0 //                                   |
    [h] => 0 //                                   |       
    [i] => 0 //                                   |
    [s] => 0 //<-here-----------------------------+
    [invert] => 1
    [days] => 1461
)

[s]应该是4.为什么4在年份部分? 我做错了什么?

更新 - 已解决

$to_time = (microtime(true));
$from_time = ( $_SESSION['startTime']);
$diff = $to_time - $from_time;
print $diff;

打印

3.xxxxxx

2 个答案:

答案 0 :(得分:3)

您必须指定格式。您正在将一个unix时间戳发送到DateTime,因此:

$d1 = new DateTime($from_time);
$d2 = new DateTime($to_time);

变为

$d1 = new DateTime('@'.$from_time);
$d2 = new DateTime('@'.$to_time);

@符号告诉DateTime我正在使用Unix时间戳。

答案 1 :(得分:0)

constructor for DateTime接受一个字符串作为参数而不是时间戳,这就是你看到“奇怪行为”的原因。

您需要在实例化DateTime对象后明确设置时间戳: -

$from_time = $_SESSION['startTime'];
$d1 = new DateTime();
$d1->setTimestamp($from_time);