PHP: Как отформатировать дату и время, чтобы использовать if / else для CSS - PullRequest
1 голос
/ 28 февраля 2020

Название, вероятно, не имеет особого смысла; Я PHP любитель.

Я пытаюсь создать пользовательский тег для моего форума, который будет отображать "X Years of Experience", но с разными цветами для каждого года, например красным для 6 месяцев, синий для первого года, желтый для второго года и т. Д.

Это код, который я сейчас использую:

<div class="ipsType_center memExperience" data-ipstooltip="">
{{$joinDate = $comment->author()->get_joined(); $currentDate = new \DateTime(); $interval = $joinDate->diff($currentDate); $experience = \IPS\DateTime::formatInterval($interval, 1);}}
    <li class="ipsResponsive_hidePhone memCustomFields">{$experience} {lang="memberexperience_experience"}</li>

Я был удалось найти рабочий образец для получения разницы в датах, и он отлично работает. Теперь мне просто нужно выяснить, как превратить $ опыт в значение, которое я могу использовать с CSS.

Я также нашел код, который позволяет форматировать переменную в часы для сравнения. Это тот код:

<?php 
 $hour = $experience->format('H');
 if ($hour < 12) {
   echo "Morning";
 } else {
   echo "Afternoon or evening";
 }
?>

Это не работает для меня, потому что мой результат всегда X дней, X месяцев или X лет. С ним всегда ассоциируется число, но это могут быть дни, месяцы, годы.

Я пытаюсь сделать что-то вроде ...

{{if $experience < 6 Months}}
Make Text Red
{{elseif $experience > 1 Year}}
Make Text Blue
{{elseif $experience > 2 Years}}
Make Text Yellow
...

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

1 Ответ

1 голос
/ 28 февраля 2020

Если $joinDate еще не является датой и временем, то конвертируйте его в единицу:

$joinDatetime = DateTime::createFromFormat('m/d/Y', $joinDate);

Сделайте свою разность для двух объектов даты и времени:

$interval = $joinDatetime->diff($currentDate);

Затем вам нужно преобразовать разницу в месяцы:

$months = $interval->m + ($interval->y * 12);

Назначить класс переменной и отобразить эту переменную в вашем html. Например:

$class = 'default';

if ($months < 6) {
    $class = 'red';
} elseif ($months > 12) {
    $class = 'blue'; 
} elseif ($months > 24) {
    $class = 'yellow';
}

Затем в вашем html сделайте что-то вроде этого:

<li class="ipsResponsive_hidePhone memCustomFields {$class}">{$experience}{lang="memberexperience_experience"}</li>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...