我利用了一些已经在另一个问题上找到的代码。
<?
$start_date = new DateTime('now');
$timestamp = strtotime( $nt['last_seen'] );
$since_start = $start_date->diff($timestamp);
echo $since_start->i.' minutes<br>';
echo $since_start->s.' seconds<br>';
?>
这似乎不起作用?? 时间戳以格式从 mysql 语句中提取
。yyyy-mm-dd hh:mm:ss
方法diff()
的第一个参数需要一个DateTime
对象,但您提供的是 Unix 时间戳。
请改用以下代码:
$start_date = new DateTime('now');
$end_date = new DateTime($nt['last_seen']);
$since_start = $start_date->diff($end_date);
echo $since_start->format('%i').' minutes<br>';
echo $since_start->format('%s').' seconds<br>';
演示!
正如 Glavić 在下面的评论中指出的那样,也可以从 Unix 时间戳创建一个DateTime
对象:
$date = new DateTime("@$timestamp"); // $timestamp is astring -- eg: 1382025097
但在这种情况下没有必要,第一种方法应该可以正常工作。
$start_date = new DateTime('now');
$timestamp = new DateTime($nt['last_seen']);
$since_start = $start_date->diff($timestamp);
echo $since_start->format('%m').' minutes<br>';
echo $since_start->format('%s').' seconds<br>';
您需要将$timestamp转换为新的日期时间
,如下所示我有几个我使用的包装器函数,请查看数据库日期差异一个sql查询,如果您要从数据库中提取$timestamp,那么没有理由不能在主查询中进行差异并完全消除在PHP中执行此操作的需要之后。
/**
* Date Diff between now and submitted data
* @param - $date - takes current date
* @return int number of days between inputted dates +ve numbers are start date in past -ve numbers are end date in future of now()
*/
function daves_date_diff($date) {
$start = new DateTime($date);
$today = new DateTime();
$diff = $start->diff($today);
return $diff->format('%d');
}
/**
* Database select based date diff as its more reliable than using php date diffs
* @param - $date - date string in mysql format of date to diff against
* @return - int - number of days date is different from now
*/
function db_date_diff($date) {
global $db;
$date = mysqli_real_escape_string($db->mysqli,$date);
$returneddiff = $db->queryUniqueObject("SELECT DATEDIFF('$date',NOW()) as DateDiff",ENABLE_DEBUG);
return $returneddiff->DateDiff;
}