我正在爲使用php和codeigniter的客戶建立一份報告。Php會計年度報告,選擇適當年份的麻煩
本報告是一份財務報告,因此,我必須反映自財年開始以來收取的款項。在這種情況下,7月31日。
我已經向用戶查詢報告的日期,但是如何讓php知道要採用哪個財政年度?
我有一個大概的瞭解,沿
線「如果月 - 日是7月31日前,使用電流年1 否則使用當年」
的東西,但是我不知道如何我會編碼,或者如果它能工作,或者有更好的方法來做同樣的事情。
我正在爲使用php和codeigniter的客戶建立一份報告。Php會計年度報告,選擇適當年份的麻煩
本報告是一份財務報告,因此,我必須反映自財年開始以來收取的款項。在這種情況下,7月31日。
我已經向用戶查詢報告的日期,但是如何讓php知道要採用哪個財政年度?
我有一個大概的瞭解,沿
線「如果月 - 日是7月31日前,使用電流年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 = 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;
}
使用這樣的: - 如果你的PHP版本是< 5.2
function getFiscalYear($timestamp)
{
$year = (int)date('Y', $timestamp);
$fiscalYearEndDate = strtotime('31 July ' . $year);
if($timestamp < $fiscalYearEndDate) $year--;
return $year;
}
使用這樣
$dateToCheck = new DateTime('1 jan 2009'); // for example
$fiscalYear = getFiscalYear($dateToCheck);
這將返回2008
這個版本應該工作: -
$date = strtotime('1 Jan 2009');
fiscalYear = getFiscalYear($date);
會回到2008年
如果我正確理解你的代碼,這會得到當年(如2011年)與今年7月31日相比(與2011年相同),那麼看到的是LESS那麼,那麼今年將成爲2010年? – JonYork
是的,這是正確的。 – vascowhite
我得到這個錯誤「致命錯誤:調用成員函數格式()在非對象在」 在$ year =(int)$ dateToCheck->格式('Y');「行 – JonYork
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
:@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'))
你在哪裏有公司財年的定義 - db,config,硬編碼在模型中? – prodigitalson
我其實沒有任何地方。它會讓它更容易在某個地方? – JonYork