2014-09-10 5 views
-7

У меня вопрос. Я пытаюсь понять ответ на этот вопрос, но, похоже, я не могу обдумать его. Надеюсь, кто-то может мне помочь. Вопрос:PHP Дата выпуска

Напишите функцию, которая берет свое имя, фамилию, год рождения, месяц и день в качестве аргументов и возвращает полное имя + возраст. Убедитесь, что приложение/программа также вернет правильные результаты в 2015 году или позже. Проверьте, являются ли первые 2 аргумента строками, а третья - целым числом.

Поскольку я новичок в PHP и понятия не имею о датах (я googled, но я не могу обойти его вокруг) Спасибо заранее! :) (написал код сам попробовать, но это бесполезно, так что я оставил его)

+0

разделение ответственности, делают одну функцию известково возраста, и оставить/фамилию FRIST из него. - http://stackoverflow.com/questions/3776682/php-calculate-age – Rufinus

+2

Пожалуйста, по крайней мере, попробуйте написать код, прежде чем обращаться за помощью к SO. –

+0

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

ответ

0

Вот простая функция, чтобы сделать это

//birthday YYYY-MM-DD 
function userInfo($fname, $lname, $birthday) { 
    //Calc age 
    $age = date_diff(date_create($birthday), date_create('today'))->y; 
    return $fname ." ". $lname . " ".$age; 
} 

теперь называем его

echo userInfo('John', 'Doe', '1986-02-01'); 
+0

Прохладный, это кажется чтобы делать то, что мне нужно. Как бы я не понял код на самом деле. Date_create - это функция построения PHP и date_diff, и я предполагаю? (я попробую Google на нее, чтобы получить больше информации, чтобы лучше понять это! просто нужно научиться думать в коде^_^ – Xereoth

1
<?php 
function getAge($f_name, $l_name, $b_day, $b_month, $b_year) { 

    //date in mm/dd/yyyy format; or it can be in other formats as well 
    $birthDate = $b_month . "/" . $b_day . "/" . $b_year; 
    //explode the date to get month, day and year 
    $birthDate = explode("/", $birthDate); 
    //get age from date or birthdate 
    $age = (date("md", date("U", mktime(0, 0, 0, $birthDate[0], $birthDate[1], $birthDate[2]))) > date("md") 
    ? ((date("Y") - $birthDate[2]) - 1) 
    : (date("Y") - $birthDate[2])); 
    return $f_name ." ". $l_name ." is: " . $age; 
} 
?> 
+0

Thansk для вашего ответа, как бы то ни было, я думаю, что это работает из того, что я пытаюсь. думаю, что это слишком сложно для того, что мне действительно нужно :) – Xereoth

+0

Просто сделайте это быстро, очевидно, что есть лучшие способы, и вы также захотите проверить переменные, чтобы убедиться, что они являются int, а не строкой и т. д. и т. д. –

0

использовать эту функцию

<?php 
    function get_the_user($fname, $lname,$m ,$d,$y) 


     $birthDate =$m.'/'.$d.'/'.$y; 
     //explode the date to get month, day and year 
     $birthDate = explode("/", $birthDate); 
     //get age from date or birthdate 
     $age = (date("md", date("U", mktime(0, 0, 0, $birthDate[0], $birthDate[1], $birthDate[2]))) > date("md") 
     ? ((date("Y") - $birthDate[2]) - 1) 
     : (date("Y") - $birthDate[2])); 
     echo "Age is:" . $age; 
    return $fname.' '.$lname.'is '.$age.' old'; 
    ?> 
-1

Почему бы не создать объект Person и создать некоторые методы для обработки логики и форматирования. Нравится:

class Person { 

    public $firstName, $lastName, $dob; 

    public function __construct($firstName, $lastName, $dob) { 
     $this->firstName = $firstName; 
     $this->lastName = $lastName; 
     $this->dob = new DateTime($dob); 
    } 

    public function getFullname() { 
     return $firstName . ' ' . $lastName; 
    } 

    public function getAge($onDate=null) { 
     if ($onDate === null) $onDate = date('Y-m-d'); 
     $onDate = new DateTime($onDate); 

     $ageOnDate = $this->dob->diff($onDate)->y; 
     return $ageOnDate; 
    } 

} 

$dude = new Person('John', 'Doe', '1980-01-15'); 
echo $dude->getFullName() . "\n"; 
echo $dude->getAge() . "\n"; // get his age today 
echo $dude->getAge('2015-06-01'); // get his age on June 1st, 2015 
+1

«Напишите функцию». Вероятно, они еще не получили объектно-ориентированного программирования, поэтому, если вы собираетесь делать домашнее задание, сделайте это как функцию. –

+0

Это прекрасный случай упражнений, чтобы познакомиться с OO. Но он не просил об этом. Это потому, что он, вероятно, не знает, что он существует. Так что не будем ему рассказывать. Или давайте ... Я просто подумал, что поделюсь тем, как большинство программистов подходят к этой проблеме. – ODaniel

+0

lol, это не моя домашняя работа, это упражнение, чтобы узнать, как использовать даты и т. Д., Но я ничего не понимаю, поэтому я скорее прошу помощи, а затем поиграю с ним, чтобы выяснить, как это работает :) Но спасибо в любом случае – Xereoth

0

Вы можете использовать класс DateTime для простых операций с датами.

function getAge($name, $surname, $b_year, $b_month, $b_date) 
{ 
    $today = new DateTime(); 
    $birthdate = new DateTime($b_year . '-' . $b_month . '-' . $b_date); 
    $diff = $today->diff($birthdate); 

    return $name . ' ' . $surname . ' is ' . $diff->format('%y years') . ' old'; 
} 

echo getAge('Mr.', 'Smith', 1990, 12, 12); 

Выход:

Mr. Smith is 23 years old 

Live preview


Проверьте первые 2 аргументы являются строками и третей является целым числом.

Я считаю, что это не будет проблемой для вас :).

Полезные ресурсы:

+1

Спасибо много, как выше, вы это прекрасно. Это дает мне хороший пример и начало заниматься скрипкой и настраивать некоторые другие вещи :) и попытаться самостоятельно ответить на вопросы: – Xereoth