我正在尝试计算两个日期之间的差异:$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.');
我做错了什么?
答案 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秒的可能性很小),并且它们都必须包含当前日期和时间。时间。