到目前为止,我试图获得两个日期之间的剩余时间百分比,以便我可以使用进度条..
我有以下代码我传递了两个日期并做了总和,但我收到了一个错误。我不确定这个错误是否是因为日期格式,如果是这样我可以改变它。
<?
$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 :(得分: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。 (说实话,应该因为很多原因而更新)