Php-计算出它是什么学年

Php-计算出它是什么学年,php,datetime,Php,Datetime,我正试图写一个剧本,以解决当前学年的问题 学年从每年8月1日开始 如何根据当前日期计算出我们所处的学年 即 2012年7月31日(20120631)将计算为2011/2012年 2012年8月13日(20120801)将算作2012/2013年 目前,这是我所拥有的,但它不是很好,因为我不想定义日期,它不会返回正确的学年,只是最初定义的$academic\u start\u日期 function check_in_range($start_date, $end_date, $date_from_

我正试图写一个剧本,以解决当前学年的问题

学年从每年8月1日开始

如何根据当前日期计算出我们所处的学年

即 2012年7月31日(20120631)将计算为2011/2012年

2012年8月13日(20120801)将算作2012/2013年

目前,这是我所拥有的,但它不是很好,因为我不想定义日期,它不会返回正确的学年,只是最初定义的$academic\u start\u日期

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 = '';}
功能检查\u在\u范围内($start\u date、$end\u date、$date\u from\u user)
{
//转换为时间戳
$start\u ts=strotime($start\u date);
$end_ts=标准时间($end_日期);
$user\u ts=strotime($date\u from\u user);
//检查用户日期是否介于开始和结束之间
return($user\u ts>=$start\ts)&&($user\u ts
$time=??;//在这里输入时间戳,它也可能是strotime(smth);
$year=日期('Y',$time);
如果(日期('n',$time)<8)
$ayear=($year-1)。“/”.$year;
其他的
$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);
$datestr='yyyyymmdd';
$year=substr($datestr,0,4);
if(intval(substr($datestr,4,2))<8)
$ayear=($year-1)。“/”.$year;
其他的
$ayear=($year)。“/”($year+1);

我会改用Datetime对象。最好在代码中传递Datetime对象,避免与日期格式(如美国/英国)等混淆

函数年份(DateTime$userDate){
$currentYear=$userDate->format('Y');
$cutoff=newdatetime($userDate->format('Y')。/07/31 23:59:59');
如果($userDate<$cutoff){
回报($currentYear-1)。“/”.$currentYear;
}
返回$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>

学生开始日期

但是我认为它是有效的…

通常你只需要得到一个值,而不是2001/2002,并使这个函数公开和静态,所以

public static function getAcademicYear()
{
    $now = new DateTime();

    $year = $now->format('Y');
    return ($now->format('m') < 8) ? $year - 1 : $year;
}
公共静态函数getAcademicYear()
{
$now=新日期时间();
$year=$now->format('Y');
返回($now->format('m')<8)$year-1:$year;
}

然后您可以在任何地方重用它,例如$academicYear=ClassName::getAcademicYear();

稍微短一点:
$year=date('Y',$time)-(date('m',$time)<8);$ayear=($year-1)。'/'.$year;
True,所以另一个版本:
$year=date('Y',$time)-(date('m',$time)<8)$year-;$year=$year.'/'。($year+1);
:)@biziclop,$time=20110801;返回1968年/1969@RiaD,你1969年回来的/1970@Codded,正如我所说,$time应该是timestamp。对于您的格式,我现在就编辑我总是使用MySQL日期格式,因为它很容易识别,可以与strotime()一起使用创建unix时间戳并将其用于与其他日期(即“2001-10-10 01:01:01”<“2001-10-09 01:01:01”)的标准字符串比较真是太棒了..对提供帮助没有任何评论..耶
<?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>
public static function getAcademicYear()
{
    $now = new DateTime();

    $year = $now->format('Y');
    return ($now->format('m') < 8) ? $year - 1 : $year;
}