Расчет процента времени, оставшегося от двух дат

Пока что я пытаюсь получить процент времени, оставшегося между двумя датами, чтобы я мог использовать индикатор выполнения ..

У меня есть следующий код, я передаю две даты и делаю сумму, но я получаю ошибку. Я не уверен, если эта ошибка из-за формата даты, если так, я могу изменить его.

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

Я получаю следующую ошибку.
Предупреждение: деление на ноль

2

Решение

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

Другие решения

Это строки. Вы не можете вычесть строки и ожидать, что все будет работать. Что происходит, это:

$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, а затем вы МОЖНО вычтите эти значения и получите разницу в секундах.

0

Я бы порекомендовал использовать объект DateTime в течение strtotime. 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

Вы используете строки (в основном, простой текст) … Так что вы ничего не можете рассчитать.
Для этого вы должны использовать временные метки (миллисекунды с начала 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
По вопросам рекламы [email protected]