Возраст человека
        Как, имея в ТВ параметре дату рождения, вывести на странице «Возраст ХХХ лет»?    
    
    
                                                                                
            Комментарии: 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]]            
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.