Странное поведение класса PHP DateTime - PullRequest
1 голос
/ 11 марта 2012

Я пытаюсь получить разницу во времени в миллисекундах.

$_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 ]

3 голосов
/ 11 марта 2012

Вы должны указать форматирование. Вы отправляете метку времени Unix в DateTime, поэтому:

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

Становится

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

Символ @ сообщает DateTime, что я использую метку времени Unix.

0 голосов
/ 11 марта 2012

Конструктор для DateTime принимает строку в качестве параметра, а не метку времени, поэтому вы видите «странное поведение».

Вам необходимо явно установить метку времени после сумасшедшего объекта DateTime: -

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