计算时间从百分之两个日期剩余

问题描述:

到目前为止,我尝试让两个日期之间的剩余,所以我可以用一个进度条时间的百分比..计算时间从百分之两个日期剩余

我有下面的代码我传递的两个日期并做了总和,但我得到一个错误。我不确定如果这个错误是由于日期格式,如果我可以改变它。

<? 
$start = '2015-11-03 14:05:15'; 
$end = '2015-11-03 18:05:15'; 

$current = '2015-11-03 16:12:15'; 

$completed = (($current - $start)/($end - $start)) * 100; 

?> 

<? print $completed; ?> 

我收到以下错误。 警告:除零除

+0

你不能减去那样的字符串。你应该使用例如时间戳,见http://php.net/manual/en/function.strtotime.php – jeroen

你正在使用字符串(基本上,纯文本)...所以你不能计算任何东西。 (自1970年开始毫秒),您应该使用该时间戳

http://php.net/manual/fr/function.strtotime.php

$start = strtotime('2015-11-03 14:05:15'); 
$end = strtotime('2015-11-03 18:05:15'); 
$current = strtotime('2015-11-03 16:12:15'); 
+0

辉煌,非常感谢。 –

+0

不客气!祝你好运 ! –

这些都是字符串。你不能减去字符串,并期望事情发挥作用。发生的事情是这样的:

$start = '2015-11-03 14:05:15'; 
$end = '2015-11-03 18:05:15'; 

既然你做-,PHP这些字符串转换为整数:

$new_start = (int)$start; // 2015 
$new_end = (int)$end; // 2015 

$new_end - $new_start -> 0 

需要strtotime()这些值回Unix时间戳,然后你CAN减去这些值,并以秒为单位获得差异。

+0

辉煌,非常感谢。 –

strtotime将采用日期字符串并将其转换为unix标准时间为秒。

<? 
$start = strtotime('2015-11-03 14:05:15'); 
$end = strtotime('2015-11-03 18:05:15'); 

$current = strtotime('2015-11-03 16:12:15'); 

$completed = (($current - $start)/($end - $start)) * 100; 

?> 

<? print $completed; ?> 
+0

辉煌,非常感谢。 –

我建议在strtotime上使用DateTime对象。 DateTime允许您指定创建时间戳的格式,而不是依靠strtotime来神奇地找出它。这使得它更可靠。

例如:

<?php 
$start = DateTime::createFromFormat('Y-m-d H:i:s', '2015-11-03 14:05:15'); 
$end = DateTime::createFromFormat('Y-m-d H:i:s', '2015-11-03 18:05:15'); 
$current = DateTime::createFromFormat('Y-m-d H:i:s', '2015-11-03 16:12:15'); 
$completed = (($current->getTimestamp() - $start->getTimestamp())/($end->getTimestamp() - $start->getTimestamp())) * 100; 
echo $completed; 
?> 

注:datetime对象在PHP 5.3中引入。任何旧版本都不会有DateTime。 (老实说,应该更新原因很多)

+0

嘿,谢谢你。代码给出了第2行的错误。致命错误:调用未定义的方法DateTime :: createFromFormat() –

+0

@LiamArmour DateTime :: createFromFormat()在PHP 5.3中引入。最有可能的是你的PHP版本较旧。所以 - 安装PHP> = 5.3会导致这个工作,否则你坚持strtotime():) –

+0

辉煌,非常感谢。 –