我正在尝试减去当前日期时间与数据库中所述时间之间的时差。日期时间当前格式为yyyy:mm:dd hh:mm:ss,但是对于这种特定情况,我只想减去时间而不是日期,所以我只想要hh:mm:ss计算然后存储到不同的变量我可以使用和格式化我想要的方式。有可能采取一个完整的日期时间,分开它并做一个差异吗?我认为这有点令人困惑,所以问你是否需要澄清。以下是我到目前为止所尝试的内容:
<?php
//The time in the database
$classTime = DateTime::createFromFormat('Y-m-d H:i:s', '0000-00-00 18:30:00');
$timein = new DateTime("now", new DateTimeZone('America/Detroit'));
$timein->getTimestamp();
$timeout = $classTime;
$totaltime = $timeout->diff($timein);
$totaltime = $totaltime->format('Y-m-d H:i:s');
$totaltime = date('0000:00:00 H:i:s', strtotime($totaltime));
//I create a new date because i'm storing this time into the database, which can't be done with a datetime.
//FORMAT TIMES
$timein = $timein->format('Y-m-d H:i:s');
$timeout = $timeout->format('Y-m-d H:i:s');
echo "Time in " . $timein . " Time Out " . $timeout . " Total Time " . $totaltime;
?>
此当前输出返回:
Time in 2013-04-02 14:05:32 Time Out -0001-11-30 18:30:00 Total Time 0000:00:00 00:00:00
但我想让它返回类似的东西:
Time in 2013-04-02 14:05:32 Time Out -0000-00-00 18:30:00 Total Time 0000:00:00 03:30:00
答案 0 :(得分:1)
您的问题不是很明确,我花了很多时间回答错误的问题,直到我仔细查看您的代码才能看到您真正想要的内容。
据我所知,您将课程的完成时间存储在数据库中作为MySql日期时间类型,并且您希望找到now
与课程结束时间之间的剩余时间。
为了这个答案的目的,我会忽略时区。
你从
开始$classTime = DateTime::createFromFormat('Y-m-d H:i:s', '0000-00-00 18:30:00');
要进行有意义的时间比较,需要将$ classTime的日期部分设置为今天: -
$timeIn = new DateTime();
$year = (int)$timeIn->format('Y');
$month = (int)$timeIn->format('m');
$day = (int)$timeIn->format('d');
$classTime->setDate($year, $month, $day);
然后您可以进行比较: -
$diff = $timeIn->diff($classTime);
$ diff现在是DateInterval的一个实例。
我们现在可以回应这些信息: -
$start = $timeIn->format('Y-m-d H:i:s');
$end = $classTime->format('Y-m-d H:i:s');
$duration = $diff->format("%Hh, %Im, %Ss");
echo "Time in: $start, Time out: $end, Duration: $duration";
当我运行代码时,给出了以下输出: -
Time in: 2013-04-05 13:22:54, Time out: 2013-04-05 18:30:00, Duration: 05h, 07m, 06s