Отчет о финансовом году в Php, проблема с выбором соответствующего года

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

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

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

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

«Если Месяц-День до 31 июля, используйте текущий год-1« Использовать в текущем году »,

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

Solutions Collecting From Web of "Отчет о финансовом году в Php, проблема с выбором соответствующего года"

Я думаю, ваш лучший выбор – это класс 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

 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

 function get_fiscal_year($format = 'Ym-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('Ym-d'); 

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

transcation_date between $fisical_year and $now

Если пользователь задает дату: @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' ))