Php отчет за финансовый год, проблемы с выбором правильного года - PullRequest
1 голос
/ 07 июля 2011

Я создаю отчет для клиента, используя php и codeigniter.

Этот отчет является финансовым отчетом, поэтому я должен отражать деньги, собранные с начала финансового года.В этом случае, 31 июля.

Я уже запрашиваю у пользователя дату отчета, но как мне узнать, какой php узнать, какой финансовый год взять?

У меня есть приблизительное представлениечто-то вроде

'Если месяц-день до 31 июля, используйте текущий год-1, иначе используйте текущий год'

Но я не знаю, как бы я это закодировал, илиесли это сработает, или если есть более элегантный способ сделать то же самое.

Ответы [ 3 ]

2 голосов
/ 07 июля 2011

Я думаю, что ваша лучшая ставка - класс dateTime.
http://us3.php.net/manual/en/class.datetime.php
Я думаю, что-то вроде этого вам понадобится

public function getCurrentYear(DateTime $dateToCheck)
{
    $today = new DateTime();
    $currentYear = (int)$today->format('Y');
    $endFiscalYear = new DateTime('31 July'); //year left out, so will default to this year
    if($dateToCheck < $endFiscalYear){ //you need PHP >= 5.2.2 for this to work
        $currentYear--;
    }
    return $currentYear;
}

Вы можете установить $ сегодня, выполнив что-то вроде: -

$today = new DateTime('20 June 2011');

Подробнее в ссылке выше

Вот немного другая версия, которая должна быть немного более надежной, поскольку она будет возвращать финансовый год любой даты, которую вы ей даете, а не только даты в текущем году.

function getFiscalYear(DateTime $dateToCheck)
{
    $fiscalYearEnd = '31 July';
    $year = (int)$dateToCheck->format('Y');
    $fiscalyearEndDate = new DateTime($fiscalYearEnd . ' ' . $year);
    if($dateToCheck <= $fiscalyearEndDate){
        $year--;
    }
    return $year;
}

используйте это так: -

$dateToCheck = new DateTime('1 jan 2009'); // for example
$fiscalYear = getFiscalYear($dateToCheck);

Это вернется 2008

Эта версия должна работать, если ваша версия PHP <5.2 </p>

function getFiscalYear($timestamp)
{
    $year = (int)date('Y', $timestamp);
    $fiscalYearEndDate = strtotime('31 July ' . $year);
    if($timestamp < $fiscalYearEndDate) $year--;
    return $year;
}

Используйте вот так: -

$date = strtotime('1 Jan 2009');
fiscalYear = getFiscalYear($date);

вернется 2008

1 голос
/ 07 июля 2011

Если пользователь указывает дату: @givenDate и вы хотите выполнить поиск в вашем dateField (тип date), вы можете использовать что-то вроде:

WHERE dateField BETWEEN 
          DATE( CONCAT(   YEAR(@givenDate)-(MONTH(@givenDate)<8), '-08-01' ))
      AND DATE( CONCAT( 1+YEAR(@givenDate)-(MONTH(@givenDate)<8), '-07-31' ))
1 голос
/ 07 июля 2011
function get_fiscal_year($format = 'Y-m-d', $cutoff_date = '31 July') {
  $fiscal_year = strtotime($cutoff_date);
  if(time() < $fiscal_year)
    $fiscal_year = strtotime($cutoff_date .' last year');

  return date($format, $fiscal_year);

}
$fisical_year = get_fiscal_year();
$now = date('Y-m-d');

Затем можно использовать функцию для запроса базы данных с условием оператора

transcation_date between $fisical_year and $now

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...