Если заданы день и месяц, верните самую последнюю дату этого дня и месяца в форме день-месяц-год - PullRequest
1 голос
/ 11 августа 2010

С учетом даты, такой как «4 мая», как мне получить самое последнее 4 мая в формате «4 мая 2010 года»?

Если комбинация день / месяц еще не произошла в этом году, в ней должна быть указана дата прошлого года (например, «31 декабря» должно переводиться как «31 декабря 2009 года»).

Ответы [ 5 ]

1 голос
/ 11 августа 2010

Мой совет - использовать дату ('z') (= день года) для сравнения

$date = '11 Aug';
$ts = strtotime($date); 
$recent = date('z', $ts) <= date('z') ? $ts : strtotime("$date previous year");
1 голос
/ 11 августа 2010

Попробуйте что-то вроде этого:

$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
}
0 голосов
/ 11 августа 2010

Вы можете использовать эту функцию:

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 год»), если текущее время больше времени, указанного в вашей строке.

0 голосов
/ 11 августа 2010
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
0 голосов
/ 11 августа 2010

Попробуйте (это псевдо-код):

<?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;
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...