Вычтите дату по сравнению с текущей датой и покажите фактические оставшиеся дни

Это моя функция ниже:

function Active()
{
............

$num_rows = $db->doQuery('SELECT PremiumDays, PremiumStartTime FROM Premium WHERE AccountID = ?', $_SESSION['AccountID']);
if ($num_rows == -1)
{
$this->Error('ERROR');
$db->getError();
return;
}

$data = $db->doRead();
$data['Status'] = $num_rows == 0 ? '<:SHOW_PREMIUM_STATUS:>' : '<b><font size="2" color="red">Premium is active - <%Days_Remaining%> days remaining.</font></b>';

$replace = array
(
'account_status'        => $data['Status'],
'days_remaining'        => number_format($data['PremiumDays'])
);

$this->content = Template::Load('account-template', $replace);
}

PremiumDays столбец содержит такие числа, как 10,15,30 и т.п.

PremiumStartTime содержит дату в этом формате 2018-12-17 21:13:00

То, чего я пытаюсь добиться, — это показать фактические дни премий, оставшихся с days_remaining, Итак, я считаю, что мне нужно вычесть из PremiumDays дни, прошедшие с начала премии, основанные на втором столбце PremiumStartTime,

Я думаю, что-то подобное, но я не уверен, как правильно реализовать это в PHP. Любая помощь с благодарностью. Заранее спасибо!

days_remaining = PremiumDays - (NumberOfDaysSincePremiumStarted(DateToday - PremiumStartTime))

0

Решение

Чтобы получить разницу в PHP, вы можете создать DateInterval использование объекта DateTime::diff между текущим временем (выход date_create()) и DateTime объект, созданный из вашего PremiumStartTime переменная. Вы можете получить доступ к days значение этого объекта, чтобы получить общее количество дней от PremiumStartTime к текущему времени. Например:

$data['PremiumStartTime'] = '2018-12-12 21:13:00';
$data['PremiumDays'] = 20;
$days_remaining = $data['PremiumDays'] - date_create($data['PremiumStartTime'])->diff(date_create())->days;
echo number_format($days_remaining);

Выход:

13

Демо на 3v4l.org

0

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

Сделайте это в БД следующим образом:

//SQL Server
$num_rows = $db->doQuery('SELECT PremiumDays, PremiumStartTime,
(PremiumDays - datediff(day,PremiumStartTime,getdate())) DaysRemaining
FROM Premium WHERE AccountID = ?', $_SESSION['AccountID']);


//MySQL
$num_rows = $db->doQuery('SELECT PremiumDays, PremiumStartTime,
(PremiumDays - datediff(now(),PremiumStartTime)) DaysRemaining
FROM Premium WHERE AccountID = ?', $_SESSION['AccountID']);

Затем:

$replace = array
(
'account_status'        => $data['Status'],
'days_remaining'        => $data['DaysRemaining']
);

Доказательство здесь: https://www.db-fiddle.com/f/xzuc89C9gQUHpdTTy9M4vf/0

Или, если вы действительно хотите сделать это на PHP:

$replace = array
(
'account_status'        => $data['Status'],
'days_remaining'        => $data['PremiumDays'] - date_diff(date_create(), date_create($data['PremiumStartTime']))->days
);
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector