Учитывая дату, подобную" 4 мая ", как мне получить самое последнее 4 мая в формат «4 мая 2010 года»?
Если в этом году еще не произошло сочетание дня и месяца, в нем должна быть указана дата прошлого года (например, «31 декабря» должно переводиться как «31 декабря 2009 года»).
Мой совет - использовать дату ('z') (= день года) для сравнения
$date = '11 Aug';
$ts = strtotime($date);
$recent = date('z', $ts) <= date('z') ? $ts : strtotime("$date previous year");
Вы можете использовать эту функцию:
echo date('m/d/y',strtotime('5 Sep',strtotime('-1 year'.str_repeat(' +1 year',(time()-strtotime('5 Sep'))/abs(time()-strtotime('5 Sep')) ) )) );
и изменить «5 сентября» на любую дату, которую вы хотите.
Он работает, устанавливая в качестве базового года в strtotime
текущий предыдущий год (т. Е. «-1 год»), а затем возвращается к текущему году (т. Е. «+1 год»), если текущее время больше, чем время, указанное в вашей строке.
function recentizer($date) {
$year = date('Y', time());
return (strtotime($date) < time()) ?
$date . ' ' . $year : $date . ' ' . ($year-1);
}
Пример:
$dates = array('4 May', '6 February', '23 December');
foreach ($dates as $date) {
echo recentizer($date) . "\n";
}
Выходы:
4 May 2010
6 February 2010
23 December 2009
Попробуйте это (это псевдокод):
<?php
$currMonth = (int)date("m");
$currentDate = (int)date("d");
$currentYear = (int)date("Y");
// extract date and month from given date as needed,
// call it $givenMonth, $givenDate
if (($givenMonth <= $currMonth) && ($givenDate <= $givenDate)) {
$givenYear = $currentYear;
}
else {
$givenYear = $currYear - 1;
}
echo "Given date is: " + $currentMonth + "/" + $currentDate + "/" + $currentYear;
?>
Попробуйте следующее:
$cmpDate = strtotime('March 15');
$cmpDay = date('d',$cmpDate);
$cmpMonth = date('m',$cmpDate);
$currentDay = date('d');
$currentMonth = date('m');
if(($currentDay > $cmpDay && $currentMonth == $cmpMonth) || ($cmpMonth > $currentMonth) {
// Add one year
}