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

Posted

技术标签:

【中文标题】Php财政年度报告,选择合适年份的麻烦【英文标题】:Php fiscal year report, trouble with selecting proper year 【发布时间】:2011-09-30 02:52:53 【问题描述】:

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

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

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

我有一个粗略的想法,类似于

'如果 Month-Day 在 7 月 31 日之前,则使用当前 year-1 否则使用当年'

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

【问题讨论】:

您在哪里有公司会计年度的定义 - db、config、模型中的硬编码? 我实际上在任何地方都没有。将它放在某个地方会更容易吗? 【参考方案1】:

我认为你最好的选择是 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 版本为 ,此版本应该可以使用

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 年回归

【讨论】:

如果我正确理解了您的代码,这将获得当年(如 2011 年)与当年的 7 月 31 日(如 2011 年)进行比较,这样会更少,所以今年会变成 2010 年? 我收到此错误“致命错误:在非对象中调用成员函数 format()”在“$year = (int)$dateToCheck->format('Y') ;"线 您是否将 $dateToCheck 声明为 DateTime 对象?如果是这样,你有什么版本的 PHP? 查看编辑 3 来回答这个问题应该适用于 PHP 我收到此消息“消息:遇到格式不正确的数值”,行“$year = (int)date('Y', $timestamp);”【参考方案2】:
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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于Php财政年度报告,选择合适年份的麻烦的主要内容,如果未能解决你的问题,请参考以下文章

将报告拆分为一个会计年度的季度

MDX 从 2 年前开始销售到今天

纳税年度内的增量

Where 子句 (T-SQL) 中的财政年度迄今为止

怎么查看qq年度报告

开发者数量2025年预计破亿,TypeScript受欢迎度飙升:GitHub最新年度报告