Php财政年度报告,选择适当年份的麻烦

时间:2011-07-07 02:38:55

标签: php mysql codeigniter date

我正在使用php和codeigniter为客户构建报告。

这份报告是一份财务报告,因此,我必须反映自财政年度开始以来收集的资金。在这种情况下,7月31日。

我已经向用户询问了报告的日期,但是如何让php了解要采用哪个会计年度?

我有一个粗略的想法,就像

一样

'如果月日是在7月31日之前,请使用当前年份1 否则使用当前年份

但是我不知道我将如何编写代码,或者它是否可行,或者是否有更优雅的方式来做同样的事情。

3 个答案:

答案 0 :(得分:2)

我认为你最好的选择是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: -

$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版本是&lt; 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年

答案 1 :(得分:1)

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

答案 2 :(得分:1)

如果用户提供日期:@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' ))