Я знаю день рождения, скажем так: 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));
Спасибо!
Это проще, если вы используете функции 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');
Других решений пока нет …