2013-04-02 235 views
1

我想减去当前日期时间和我的数据库中规定的时间之间的时差。日期时间的当前格式是yyyy:mm:dd hh:mm:ss,但是对于这种特定情况我只是想减去时间而不是日期,所以我只希望hh:mm:ss被计算并存储到另一个不同的日期变量我可以使用和格式如何我想要的。是否有可能采取完整的日期时间,将其分开并对其进行区分?我认为这有点令人困惑,所以问你是否需要澄清。这里就是我迄今为止尝试:PHP差异部分日期时间

<?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 
+1

你假设出来的时候总是同一日期?为什么不包括日期? – Revent

+0

不幸的是,它不是,它取决于从数据库中提取的类,我只是以这种方式做到了简单的事情,对不起,如果这种困惑更重要。 – Staleyr

+0

如果您正在处理“时间”部分,则“DateTime”无法正确计算。时间基于时间戳,0表示1970年1月1日UTC(如果我没有记错的话),所以计算后只留下一小时/分钟/秒的时间戳就会给秒数差,所以从那里开始, d必须手工计算,以小时:分钟:秒。 – Jon

回答

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