Возраст человека
Как, имея в ТВ параметре дату рождения, вывести на странице «Возраст ХХХ лет»?
Комментарии: 20
<?php
$age = DateTime::createFromFormat('d/m/Y', '29/02/1880')
->diff(new DateTime('now'))
->y;
echo $age;
?>
Спасибо, а можно откомментировать что за что отвечает?
29/02/1880 — это вообще что? )))
29/02/1880 — это вообще что? )))
Создается объект DateTime из даты в TV
'd/m/Y' — формат хранения даты в TV, d — дни с начальным 0, m — месяцы с начальным нулем, Y — год 4 цифры
'29/02/1880' — собственно дата рождения из TV
diff — вычисляет разницу между созданным объектом и текущей датой (now = сейчас)
y — вывод количеств полных лет из этой разницы, что будет соответствовать возрасту человека
Вам нужно поменять формат согласно дате в вашей TV.
'd/m/Y' — формат хранения даты в TV, d — дни с начальным 0, m — месяцы с начальным нулем, Y — год 4 цифры
'29/02/1880' — собственно дата рождения из TV
diff — вычисляет разницу между созданным объектом и текущей датой (now = сейчас)
y — вывод количеств полных лет из этой разницы, что будет соответствовать возрасту человека
Вам нужно поменять формат согласно дате в вашей TV.
Алексей, доброй ночи.
Я так понимаю, что надо создать сниппет?
В нем как вставить данные из ТВ? (ТВ называется birthday)
и как потом его корректно вызвать на странице?
Я так понимаю, что надо создать сниппет?
В нем как вставить данные из ТВ? (ТВ называется birthday)
и как потом его корректно вызвать на странице?
Пишите сниппет
В чанке:
$age = DateTime::createFromFormat('d/m/Y', $input)
->diff(new DateTime('now'))
->y;
return $age;
Вызываете его как модификатор на TVВ чанке:
[[+tv.birthday:snippet]]
Создал сниппет:
вызвал на странице:
Вообще теперь пустая страница ((
вызвал на странице:
<strong>Возраст:</strong>
[[+tv.birthday:ages]]
Не получилось.Вообще теперь пустая страница ((
В каком виде хранится дата в TV? Можно прямо в базе данных глянуть, что записывается
вот пример:
1999-03-11 00:05:00
1999-03-11 00:05:00
Поменяйте в сниппете 'd/m/Y' на 'Y-m-d H:i:s'
отлично!
Огромное спасибо!!!
Сделал сниппет:
Огромное спасибо!!!
Сделал сниппет:
<?php
$age = DateTime::createFromFormat('Y-m-d H:i:s', $input)
->diff(new DateTime('now'))
->y;
return $age;
вызов:[[+tv.birthday:ages]]
Еще есть вопрос: как сделать чтобы после цифры добавлялось 20 лет, но 21 год и 22 года? $cases = array(2, 0, 1, 1, 1, 2);
$titles = array('год', 'года', 'лет');
return $titles[($input % 100 > 4 && $input % 100 < 20) ? 2 : $cases[min($input % 10, 5)]];
Доброе утро, можно полностью весь код сниппета написать?
А то добавил и не получилось (((
А то добавил и не получилось (((
Это и есть весь код сниппета. Используется так:
В вашем примере будет как-то так:
[[+age:имя_сниппета]]
В вашем примере будет как-то так:
[[+tv.birthday:ages:имя_сниппета]]
Или так:[[!имя_сниппета? &input=`[[+tv.birthday:ages]]`]]
«лет» выводится, а цифра из сниппета ages перестала выводиться.
[[+tv.birthday:ages]] [[+tv.birthday:ages: имя_сниппета]]
Так то работает, но конструкция сложная.
Но и на том спасибо!
Все равно решение ))))
Но и на том спасибо!
Все равно решение ))))
А если дата рождения хранится в timestamp, получится в таком случае воспользоваться этим кодом?
В мануале есть:
$age = DateTime::createFromFormat('U', $input)
->diff(new DateTime('now'))
->y;
return $age;
Ок, спасибо!
Подытожу, сниппет ages с выводом текста:
<?php
$cases = array(2, 0, 1, 1, 1, 2);
$titles = array('год', 'года', 'лет');
$age = DateTime::createFromFormat('Y-m-d H:i:s', $input)
->diff(new DateTime('now'))
->y;
$title = $titles[($age % 100 > 4 && $age % 100 < 20) ? 2 : $cases[min($age % 10, 5)]];
return $age . " " . $title;
и вызов [[+tv.birthday:ages]]
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.