@hollanditkzn

Как можно посчитать часы и минуты по тарифу?

Не могу понять как посчитать стоимость по тарифу который учитывала часы и минуты
<?php $time = date('G,i', $sumShifts);//Здесь допустим стоит время 07:33, я перевожу его примерно так часы,минуты
        $rate = 55.56;//тариф
        echo $rate*$time ?>

Но вместо 407,26 получаю 388.92.
У меня конечно мысль то что часы сначало вычесть а потом минуты и суммировать, но может есть какое-то готовое решение в php?
  • Вопрос задан
  • 354 просмотра
Решения вопроса 1
gromdron
@gromdron
Работаю с Bitrix24
Посмотрите как работает в date G и i, как php читает запятую при приведении типов.

Немного дополненный пример.

/* @var float Стоимость минуты разговора, в данном случае 55 рублей 56 копеек */
$rateMinutes = 55.56;

/* @var DateTime Время начало разговора/события */
$oStartDate = new \DateTime('11.10.2017 10:37:00');

/* @var DateTime Время оконачания разговора/события */
$oEndDate = new \DateTime('11.10.2017 10:47:00');

/* @var int Длительность события в секундах */
$durationSeconds = abs($oEndDate->getTimestamp()-$oStartDate->getTimestamp());

/* @var int Длительность события в минутах, округленных в большую сторону */
$durationMinutes = round($durationSeconds/60);

/* @var float Стоимость разговора/события */
$price = $durationMinutes * $rateMinutes;

// Выводим стомость разговора/события
var_dump($price);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
А вы в курсе что в часе 60 минут а не 10 и не 100 тем более?
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
$time = date('G,i', $sumShifts);
Если всё остальное у вас верно, то в $time будет записана строка "7,33". Но в PHP, как и во всех других языках программирования, используется английская нотация записи чисел, в которой дробная часть отделяется точкой. Так что при математических операциях PHP использует только валидную часть этой строки, то есть "7".
7 * 55.56 = 388.92
Ну, и как уже заметил Дмитрий Гординский, 7 часов 33 минуты - это не 7.33 часа, а 7+33/60 = 7.55
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы