Я пытаюсь написать простую систему выставления счетов.Я хотел использовать DateTime Diff для расчета стоимости каждого счета.
Пока у меня есть:
/* In this example $dayLength and $ratePerSec don't really matter but we will use the
hypotethical values of 8.0 and 0.0054 for now */
$date1 = new DateTime( "Time1FromDatabase", [DateTimeZoneOfChoice] );
$date2 = new DateTime( "Time2FromDatabase", [DateTimeZoneOfChoice] );
$diff = $date2->diff( $date1 );
$lenInSec = $diff->format("%y")*365*$dayLength*3600 +
$diff->format("%d")*$dayLength*3600 +
$diff->format("%h")*3600 +
$diff->format("%i")*60 +
$diff->format("%s");
$cost = $lenInSec * $ratePerSecond;
Когда я пытаюсь вывести стоимость, используя $ lenInSec, сгенерированный из DateTime Diff, я получаюдействительно странные результаты.Иногда, где-то 1 к 3 и 1 к 50 разам, я получаю правильное значение, скажем, 460.25.В большинстве случаев я просто получаю случайную строку букв, цифр или символов, например: þ50.
Я обнаружил, что если я получу результат 2+ раза, то при окончательном выводе получуожидаемый результат совершенно.
Мое временное исправление в данный момент заключается в том, чтобы в функции getCost () выполнить:
ob_start();
echo $cost;
echo $cost;
ob_clean();
return $cost;
И до сих пор это, похоже, решает проблему, и мне кажется,чтобы получить ожидаемый результат каждый раз, но это немного странно.
Я знаю, что это Diff DateTime в уравнении, потому что, если я заменю его на старый стиль:
strtotime( "Time2FromDatabase") - strtotime( "Time1FromDatabase")
это работаетидеально каждый раз.
У меня также есть текущие итоговые затраты:
$totalCost += $cost;
Вывод $ totalCost всегда выводит правильное значение независимо от того, использую ли я метод DateTime Diff или метод strtotime.
Я также пытался использовать intval.(int) и (string) преобразуют переменную $ lenInSec перед ее использованием в уравнении, и она не имеет никакого эффекта.
Может кто-нибудь дать какие-либо подсказки относительно того, почему это происходит?Это (n) (не) известная ошибка в PHP-классах DateTime / Diff?
EDIT:
$date1 = new DateTime( "2011-09-04 09:00:00", new DateTimeZone("UTC") );
$date2 = new DateTime( "2011-09-04 18:00:00", new DateTimeZone("UTC") );
//Essentially 1 day of work
$rate = 200.00; //Per Day
$ratePerSec = 0.00617283950617283950617283950617;
// $rate / (9 hours * 3600 seconds )
$lenInSec = 32400; // From the diff calculation
$cost = $lenInSec * $ratePerSec; // Cost should now equal 200.
echo $cost; // Sometimes outputs 8, other times 200, other times þ50.
//I think the þ50 is when you have a number like 425.50 where þ is the 425.
$totalCost += $cost;
echo number_format($totalCost,2); /* Will return the correct
value of all the $cost variables added no matter what the individual $cost
variables are output as, in this case 200.00 */