[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Year из даты
maq
1. Из базы MySQL получаю значение поля даты. Как вывести его в формат дд.мм.гггг?
$sDate = $rowResume ['rs_birth'];
// $sDate = "2009-12-31"
// надо получить "31.12.1970"

2. Как вычислить возраст, зная дату рождения?



Спустя 9 минут, 18 секунд (23.06.2009 - 21:53) kirik написал(а):
Цитата (maq @ 23.06.2009 - 13:44)
1. Из базы MySQL получаю значение поля даты. Как вывести его в формат дд.мм.гггг?

PHP
echo strftime('%d.%m.%G'strtotime('2009-12-31'));


Цитата (maq @ 23.06.2009 - 13:44)
2. Как вычислить возраст, зная дату рождения?

Математика, третий класс.. Из сегодняшней даты вычесть дату рождения.

Спустя 11 минут, 44 секунды (23.06.2009 - 22:05) glock18 написал(а):
Цитата (kirik @ 23.06.2009 - 18:53)
Математика, третий класс.. Из сегодняшней даты вычесть дату рождения.


kirik, я думаю, ты не справедлив. Это почти пятый biggrin.gif В третьем, наверно, еще такой тип данных date не изучают wink.gif

Спустя 23 часа, 40 минут, 13 секунд (24.06.2009 - 21:45) maq написал(а):
Цитата
Математика, третий класс.. Из сегодняшней даты вычесть дату рождения

Неужели?
1. Я что-то не увидел в ответе двух переменных в формате даты, чтобы из одной вычитать другую.
2. А строковые для этого не годятся. Разве что, сделать что-то наподобие
PHP
$sYear1 strftime("%Y"strtotime('2009-12-31'));
$sYear2 date("Y");
$nAge $sYear2 $sYear1;

(предварительно сравнив, день и месяц обеих переменных в формате даты)

Так что, с вашей внимательностью действительно в 3-й класс и надо biggrin.gif

Спустя 10 минут, 6 секунд (24.06.2009 - 21:55) sergeiss написал(а):
Сам спросил, сам ответил... Все бы так wink.gif Правда, кАменты я не понял. Особенно насчет внимательности.

PS. А для решения этой задачи есть другие варианты, более грамотные. Но раз автора вопроса удовлетворяет найденный им ответ... То зачем что-то говорить еще? rolleyes.gif

Спустя 14 минут, 7 секунд (24.06.2009 - 22:09) kirik написал(а):
Цитата (maq @ 24.06.2009 - 13:45)
1. Я что-то не увидел в ответе двух переменных в формате даты, чтобы из одной вычитать другую.

Предпологалось что до этого нужно дойти самому используя первую подсказку, что вы и сделали, но немного поиграв с датами вы должны были заметить, что день рождения человека, рожденного раньше 1970 года может считаться не правильно (почему?). Поэтому тут нужно оперировать не с unix timestamp, а именно с датами. Посмотрев функции работы с датами и не найдя ничего более-менее подходящего должен возникнуть вопрос: "А могу ли я достать из БД сразу кол-во лет? Ведь там есть удобные функции для работы с датами". И после нескольких опытов родился бы какой-нибудь такой вариант:
SQL
SELECT ROUND(DATEDIFF(CURDATE(), `birthday`) / 365) AS `age` FROM `users`



Такой ответ устроит? smile.gif

Спустя 4 минуты, 16 секунд (24.06.2009 - 22:13) glock18 написал(а):
maq, справедливости ради отмечу, что kirik имел ввиду вовсе не вычитание строк.

Цитата (maq @ 24.06.2009 - 18:45)
(предварительно сравнив, день и месяц обеих переменных в формате даты)

дата - это та же строка, только вид сбоку.

PHP
$sYear1 = strftime("%Y", strtotime('2009-12-31'));


если бы вы разобрались в этих функциях и с тем, что они делают, то вопросы по тому, как получить разницу дат отпали. а ведь там действительно надо вычесть из одной другую. вот только в каком месте и что из чего wink.gif почитай и разберись. там все просто

PS: пссс... опаздал я. kirik сам справедливость восстановил smile.gif

Спустя 3 минуты, 52 секунды (24.06.2009 - 22:17) glock18 написал(а):
SQL
SELECT ROUND(DATEDIFF(CURDATE(), `birthday`) / 365) AS `age` FROM `users`


я бы кстати вот так посоветовал

SQL
SELECT YEAR(DATEDIFF(CURDATE(), `birthday`)) AS `age` FROM `users`


Разницы нет в принципе, но надо же функцию соответствующую заюзать smile.gif

Спустя 16 минут, 52 секунды (24.06.2009 - 22:34) kirik написал(а):
Цитата (glock18 @ 24.06.2009 - 14:17)
я бы кстати вот так посоветовал

SQL
SELECT YEAR(DATEDIFF(CURDATE(), `birthday`)) AS `age` FROM `users`

Разве будет работать? Ведь YEAR нужна чтобы получить год из даты, DATEDIFF возвращает разницу между датами в днях, тоесть тут нужно перевести дни в годы.

Спустя 10 минут, 55 секунд (24.06.2009 - 22:45) glock18 написал(а):
а, ну да. тогда так можно

SQL
SELECT TIMESTAMPDIFF(YEAR,`birthday`,CURDATE()) AS `age` FROM `users`


вот как-то так. а с YEAR и вправду лажанул. забыл, что datediff возвращает в днях.

Спустя 5 минут, 20 секунд (24.06.2009 - 22:50) kirik написал(а):
Цитата (glock18 @ 24.06.2009 - 14:45)
тогда так можно

красивенько smile.gif

Спустя 5 минут, 45 секунд (24.06.2009 - 22:56) glock18 написал(а):
просто слажал - вот надо было срочно че-то еще придумать smile.gif
ничего особенного - как обычно просто в mysql, как и php, валяется пара функций, которые никто не юзает почти, а иногда можно че-нить с ними сделать приличное.

Спустя 20 часов, 22 минуты, 56 секунд (25.06.2009 - 19:19) maq написал(а):
Цитата
Цитата
ELECT ROUND(DATEDIFF(CURDATE(), `birthday`) / 365) AS `age` FROM `users`

Такой ответ устроит?

К сожалению, не устроит, т.к. в году не всегда 365 дней.

Цитата
а, ну да. тогда так можно
Цитата
SELECT TIMESTAMPDIFF(YEAR,`birthday`,CURDATE()) AS `age` FROM `users`

устраивает. Проверил на точность 365-366 - выдает корректно.

Вопрос в догонку: есть ли PHP-функция наподобие TIMESTAMPDIFF?

Спустя 5 минут, 8 секунд (25.06.2009 - 19:24) twin написал(а):
Вот это потести:
PHP
function find_age($year$month$day
{
$date $year."-".$month."-".$day;
$age date("Y"strtotime("now")) - date("Y"strtotime($date)); 
    if(
date("n"strtotime("now")) < date("n"strtotime($date))) 
    
$age--; 

    if(
date("n"strtotime("now")) === date("n"strtotime($date))) 
        if(
date("j"strtotime("now")) < date("j"strtotime($date)))
        
$age--; 
      
return 
$age;
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.