我正在努力编写一个可以解决当前学年的脚本.
学年从每年的8月1日开始.
我如何根据当前日期确定我们所处的学年.
即2012年7月31日(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 = '';}
Run Code Online (Sandbox Code Playgroud)
$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);
Run Code Online (Sandbox Code Playgroud)
对于您的格式:
$datestr = 'YYYYmmdd';
$year = substr($datestr, 0, 4);
if(intval(substr($datestr,4,2)) < 8)
$ayear = ($year - 1).'/'.$year;
else
$ayear = ($year).'/'.($year + 1);
Run Code Online (Sandbox Code Playgroud)
我会改用Datetime对象。最好在代码中传递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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1975 次 |
| 最近记录: |