计算两个日期剩余时间的百分比

时间:2015-11-03 15:02:17

标签: php time percentage

到目前为止,我试图获得两个日期之间的剩余时间百分比,以便我可以使用进度条..

我有以下代码我传递了两个日期并做了总和,但我收到了一个错误。我不确定这个错误是否是因为日期格式,如果是这样我可以改变它。

<?
$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; ?>

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

4 个答案:

答案 0 :(得分:3)

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; ?>

答案 1 :(得分:1)

你正在使用字符串(基本上是纯文本)......所以你无法计算任何东西。 您应该使用时间戳(从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');

答案 2 :(得分: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 减去这些值,并在几秒钟内得到差异。

答案 3 :(得分: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; 
?>

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