计算2个日期之间的差异我做错了什么?

时间:2016-02-23 02:27:28

标签: php datetime

我正在尝试计算两个日期之间的差异:$now$old以获得-> how long as past since old datetime

$current_date = time();
$old= new DateTime($dateTimeString);
$now= new DateTime($current_date);
$interval = $now->diff($old);

我正在尝试使用这些值:2016-02-23 02:15:43 --- 2016-02-22 21:45:11,结果超过了14小时的差异。我打印结果如下:

$interval->format('%i Hours ago.');
$interval->format('%d Days ago.');

我做错了什么?

1 个答案:

答案 0 :(得分:1)

问题在于:

$current_date = time();
$now = new DateTime($current_date);

time()返回的值是自1970-01-01 00:00:00 UTC以来的秒数。 DateTime构造函数尝试将其解释为使用其中一种常用日期格式的日期,它会失败并生成用DateTime初始化的0个对象(即1970-01-01 00:00:00 UTC)。

如果要从Unix时间戳创建新的DateTime对象(time()返回的值,您可以使用DateTime::createFromFormat()

$current_time = time();
$now = DateTime::createFromFormat('U', $current_time);

或者您可以将带有'@'前缀的时间戳传递给DateTime::__construct()

$current_time = time();
$now = new DateTime('@'.$current_time);

此格式在Compound date/time formats page

中说明

但创建包含当前日期和时间的DateTime对象的最简单方法是将'now'作为参数传递给构造函数,或者完全省略它:

$now1 = new DateTime('now');
$now2 = new DateTime();

上面构造的两个DateTime对象应该是相同的(它们相隔1秒的可能性很小),并且它们都必须包含当前日期和时间。时间。