Как я могу написать аккуратный код, чтобы получить дату последнего дня рождения?

Я знаю день рождения, скажем так: 1996-12-12
Я знаю, что сегодня это: 2014-11-12

Теперь я хочу получить дату последнего дня рождения. И я написал это решение, но мне не нравится сложность кода. Как я могу написать это более читабельным для других программистов?

$lstrBirthday       = '1996-12-12';
$lstrLastBirtday    = (strtotime(date('Y').date('-m-d', strtotime($lstrBirthday))) > strtotime('now')) ? (date('Y') - 1).date('-m-d', strtotime($lstrBirthday)) : date('Y').date('-m-d', strtotime($lstrBirthday));

Спасибо!

1

Решение

Это проще, если вы используете функции DateTime

$begin = new DateTime( '1996-12-12' );
$end = new DateTime();
$end = $end->modify( '-1 day' );

$interval = new DateInterval('P1Y');
$daterange = new DatePeriod($begin, $interval ,$end);

$bd = '';

foreach($daterange as $date){
$bd = $date->format("Ymd");
}

Редактировать: Итак, теперь у вас есть последняя запись;)

Что-то в этом роде я не могу проверить сейчас, но вы можете учиться в течение периода. Если дата в прошлом, вы должны получить последний день рождения. Если вы делаете +1 year это в будущем.

Редактировать: Для @pascalvgemert, возможно, это немного более читабельно для вас …

public function getLastBirthdate($startDate) {
$begin = new DateTime( $startDate );
$end = new DateTime();
$end = $end->modify( '-1 day' );

$interval = new DateInterval('P1Y');
$daterange = new DatePeriod($begin, $interval ,$end);

$bd = '';

foreach($daterange as $date){
$bd = $date->format("Ymd");
}

return $bd;
}

$lastBD = getLastBirthdate('1996-12-12');
5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]