PHP для расчета не позднее 31 марта

я хочу рассчитать самое позднее 31 марта .... предположим, что дата 1 января 2012 г. я хочу, чтобы результат был 31 марта 2011 г., и если это 1 апреля 2011 г., то также я хочу получить результат 31 марта 2011 г. и если его 1 марта 2011 г. должно наступить 31 марта 2010 г. ..... надеюсь, я ясно выразился ... (с php) ... я вычисляю дату с этим для финансового года ... always between 31-mar-lastyear to 1-April-thisyear .. . год должен браться автоматически... я так пытался

31-mar-date('y') and 31-mar-date('y')-1

но он не работает, так как каждый раз принимает текущий год.


person Harinder    schedule 27.05.2012    source источник


Ответы (3)


Вот пример использования замечательной функции strtotime в php.

<?php

$day = 1;
$month = 1;
$year = 2011;

$date = mktime(12, 0, 0, $month, $day, $year);

$targetMonth = 3;
$difference = $month - $targetMonth;

if($difference < 0) {
    $difference += 12;
}

$sameDateInMarch = strtotime("- " . $difference . " months", $date);

echo "Entered date: " . date("d M Y", $date) . "<br />";
echo "Last 31 march: " .  date("t M Y", $sameDateInMarch);

// the parameter 't' displays the last day of the month
?>
person Geoffrey De Vylder    schedule 27.05.2012

Что-то вроде этого:

function getLast() {
    $currentYear = date('Y');

    // Check if it happened this year, AND it's not in the future.
    $today = new DateTime();
    if (checkdate(3, 31, $currentYear) && $today->getTimestamp() > mktime(0, 0, 0, 3, 31, $currentYear)) {
        return $currentYear;
    }

    while (--$currentYear) {
        if (checkdate(3, 31, $currentYear)) {
            return $currentYear;
        }
    }

    return false;
}

var_dump(getLast());

Он должен возвращать год или false.

person Kai Sellgren    schedule 27.05.2012
comment
неопределенная функция getTimestamp() ?? - person Harinder; 27.05.2012
comment
@Harinder теперь должен быть в порядке :) - person Kai Sellgren; 27.05.2012
comment
Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный T_OBJECT_OPERATOR if (checkdate(3, 31, $currentYear) && (new DateTime())->getTimestamp() > mktime(0, 0, 0, 3, 31, $currentYear)) { эта строка - person Harinder; 27.05.2012
comment
Жаль, что в данный момент у меня нет PHP, попробуйте удалить ( и ) вокруг new DateTime(), чтобы получилось так: new DateTime()->getTimestamp(). Обновил мой ответ. - person Kai Sellgren; 27.05.2012
comment
Как это возможно? Пример на PHP делает именно это: fi.php.net/manual/en/ datetime.gettimestamp.php - person Kai Sellgren; 27.05.2012

if (date('m')>3) {
    $year = date('Y').'-'.(date('Y')+1);
} else {
    $year = (date('Y')-1).'-'.date('Y');
}
echo $year;

это чтобы получить текущий финансовый год для Индии

person Azhar    schedule 07.12.2016
comment
Ответы только на код не помогают. Пожалуйста, отредактируйте ответ и добавьте объяснение. - person Tushar; 07.12.2016