2012-08-13 50 views
3

我想寫一個腳本,可以解決當前學年。Php - 制定什麼學年是

學年從每年的8月1日開始。

我如何根據當前日期計算出我們在哪個學年?

即 月31日2012年7月(20120631)將制定出爲2011/2012

2012年8月13日(20120801)將制定出爲2012/2013

目前,這是我的,但它不是很好,因爲我不想定義日期,並且它不會返回正確的學年,只是最初定義的$ academic_start_date。

function check_in_range($start_date, $end_date, $date_from_user) 
{ 
    // Convert to timestamp 
    $start_ts = strtotime($start_date); 
    $end_ts = strtotime($end_date); 
    $user_ts = strtotime($date_from_user); 

    // Check that user date is between start & end 
    return (($user_ts >= $start_ts) && ($user_ts <= $end_ts)); 
} 


$academic_start_date = '20110801'; 
$academic_end_date = '20120731'; 
$startdate = '20120813'; 

$acyear_check = check_in_range($academic_start_date, $academic_end_date, $startdate); 
if ($acyear_check == 1) { $acyear = $academic_start_date;} 
else { $acyear = '';} 
+0

我一直使用MySQL的日期格式,因爲它很容易識別,可以用的strtotime()用於創建一個UNIX時間戳,它可以在標準中使用__string比較___與其他日期(即'2001-10-10 01:01:01'<'2001-10-09 01:01:01') – Waygood 2012-08-13 15:52:26

回答

7
$time = ??;// here you put timestamp, it also may be strtotime(smth); 

$year = date('Y', $time); 
if(date('n', $time) < 8) 
    $ayear = ($year - 1).'/'.$year; 
else 
    $ayear = ($year).'/'.($year + 1); 

爲了您的格式:

$datestr = 'YYYYmmdd'; 
$year = substr($datestr, 0, 4); 
if(intval(substr($datestr,4,2)) < 8) 
    $ayear = ($year - 1).'/'.$year; 
else 
    $ayear = ($year).'/'.($year + 1); 
+0

有點短:'$ year = date('Y',$ time ) - (日期('m',$ time)<8); $ ayear =($ year - 1)。'/'。$ year;' – biziclop 2012-08-13 15:38:09

+0

@biziclop,對於我來說,有點短而且難於閱讀 – RiaD 2012-08-13 15:38:50

+0

確實如此,另一個版本:'$ year = date('Y ',$ time) - (date('m',$ time)<8); if(date('m',$ time)<8)$ year--; '$'。($ year + 1);':) – biziclop 2012-08-13 15:41:17

3

我會用datetime對象來代替。更好的傳遞日期時間在你的代碼物體周圍,停止任何混淆日期格式(如美國/英國)等

function academicYear(DateTime $userDate) { 
    $currentYear = $userDate->format('Y'); 
    $cutoff = new DateTime($userDate->format('Y') . '/07/31 23:59:59'); 
    if ($userDate < $cutoff) { 
     return ($currentYear-1) . '/' . $currentYear; 
    } 
    return $currentYear . '/' . ($currentYear+1); 
} 
0

這是稍長比別人,但思路是一樣的..我做到了進入一個頁面,我可以證明/驗證,所以它是一種形式,而不是一種功能。一些修改,你有一個模型。

<?PHP 
if (!isset($_REQUEST['start']) || empty($_REQUEST['start'])) { 
    echo "Enter a date to check for.<br>\n"; 
} else { 
    $start = $_REQUEST['start']; 
    $startYear = (int)substr($start,0,4); 
    $start_date = date("M d, Y", mktime(0,0,0,substr($start,4,2),substr($start,6,2),substr($start,0,4))); 
    $ac_start_date = date("M d, Y", mktime(0,0,0,'8','1',$startYear)); 
    if ($start_date < $ac_start_date) { 
     $AC_Year = ($startYear-1)."/".($startYear); 
    } else { 
     $AC_Year = ($startYear)."/".($startYear+1); 
    } 
    echo "Academic Year for ".$start." = ".$AC_Year.".<br>\n<br>\n"; 
} 
?> 
<form name="aychk"> 
    <div style="float:left;"> 
     Student start date 
    </div> 
    <div style="float:left;"> 
     <input name="start" type="text" placeholder="YYYYMMDD" /> 
    </div> 
    <div style="clear:both;"></div> 
    <input type="submit" value="Check"> 
</form> 

,但我認爲它的工作原理...

+1

真棒.. downvoted沒有評論提供幫助..耶 – Silvertiger 2012-08-13 16:42:42