Php – выясните, какой учебный год он

Я пытаюсь написать сценарий, который будет работать в текущем учебном году.

Учебный год начинается 1 августа каждого года.

Как я могу определить, в каком учебном году мы находимся на основе текущей даты.

т.е. 31 июля 2012 года (20120631) будет работать как 2011/2012

13 августа 2012 (20120801) будет работать как 2012/2013

На данный момент это то, что у меня есть, но это не очень хорошо, поскольку я не хочу определять даты, и он не возвращает правильный учебный год только изначально определенного $ академического_старта_дата.

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 = '';} 

 $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); 

Вместо этого я бы использовал объекты 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); } 

Это немного больше, чем другие, но идея такая же .. Я сделал это на странице, которую я мог бы попробовать / проверить, так что это форма вместо функции. несколько модификаций, и у вас есть модель.

 <?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> 

но я думаю, что это работает …