всем, у меня есть этот проект, который я создаю для клиента, которому нужен что-то вроде индикатора индикатора выполнения, показывающего, когда истечет срок действия плана подписки пользователя, например, пользователь, зарегистрированный в Сумма X дней, и план должен закончиться в следующие 7 дней после (в котором пользовательская пробная версия будет завершена).
вот логика, которую я использую, но она, похоже, не работает, лучший идеал или способ обойти это было бы лучше.
Дата регистрации пользователя возвращается 2018-09-11 16: 32: 08.000000 - (LARAVEL CARBON) сохранено в БД
а затем я добавляю к нему 7 дней, используя приведенный ниже код Углерод :: createFromFormat ('Y-m-d H: i: s', 2018-09-11 16: 32: 08.000000;
Дата истечения срока действия пользовательского трейла заканчивается 2018-09-18 16: 32: 08.000000 - Не сохраняется в БД.
на мой взгляд, у меня есть этот div, содержащий индикатор прогресса начальной загрузки.
<div class = "progress-bar progress-bar-danger" role = "progressbar" aria-valuenow = "80" aria-valuemin = "0" aria-valuemax = "100" style = "width: 20%">
<span class = "sr-only">20%Complete (danger)</span>
</div>
Опять же, вопрос в том, как мне пройти цикл или переключить случай между каждым прошедшим днем, чтобы хотя бы указать прогресс, скажем, например, если дата на день старше, добавьте переменную, возвращающую 20%, которую я могу поместить в прогресс div
это именно то место, где я заблудился, я не могу понять, какая правильная логика должна работать, пожалуйста, если вы разберетесь с математикой, я буду очень хорош.
о, я знаю, что такое математика, я не знаю, хотите ли вы, чтобы время осталось, или время прошло ... lol
Мне просто нужно время, так что я могу поработать с ним
Я не использую Laravel, но я бы сказал что-то вроде этого
$Carbon = New Carbon($row['subscribe_date']); //not sure how you do this
//expire 7 days after original date
$Carbon ->modify('+7 days');
$expire = $Carbon->getTimestamp();
$percent = round(($expire / time())*100);
if ($percent <= 0) //expired
Возможно, я ошибаюсь в математике, потому что я просто пытаюсь это сделать.
Возможно, вам придется сделать что-то подобное, в зависимости от того, хотите ли вы «оставшееся время» или «прошедшее время».
$percent = round(100-($expire / time())*100));
if ($percent > 100) //expired
Например, возьмите эти две отметки времени Unix:
// 2018-9-9 / 2018-9-16 = 99.99 something.
// and maybe you want the something, the 00.01 bit.
1536451200 / 1537056000
Я посмотрел на Carbon, это просто расширение DateTime, так что с точностью до секунды.
Тогда, конечно, вам нужно вернуть его как JSON, я уверен, что есть какой-нибудь классный способ Laravel для этого.
Если вам нужны дни, вы можете вычесть два и разделить на количество секунд в дне.
$seconds = time() - $Carbon->getTimestamp();
if ($seconds > 0 )
$days = floor($seconds / (60*60*24)); //60 seconds * 60 minutes * 24 hours
else
$days = 0;
И вы всегда можете сделать это для отметки времени, если вам не нравится time
(new Carbon)->getTimestamp();
Это просто арифметика.
Ваше здоровье!
Привет @ArtisticPhoenix, я попытался интерпретировать то, что вы написали выше, и это был результат - без округления - 1.0005319508142, при округлении до 1,
Modify работает и с Carbon, это просто расширение DateTime
, также известное как для людей, которые не могут вспомнить, что +7 Days
добавляет 7 дней с addDays
. Я посмотрел его исходный код :). Но ничего страшного.
Я не буду повторять trail ended'
, потому что вы меняете тип данных с int на строку. Я бы просто повторил 100
, также, если вы используете backtic `, сделайте его встроенным блоком кода в комментариях.
просто делайте проценты секунд, я не знаю математики в голове, но Carbon - это просто оболочка DateTime, вы можете сделать
Carbon->getTimestamp()