我正试图以毫秒为单位获得时差。
$_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
答案 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);