3

私は、現在の学年でうまくいくスクリプトを書こうとしています。

学年は毎年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 = '';}
4

4 に答える 4

8
$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);
于 2012-08-13T15:35:53.493 に答える
6

代わりに Datetime オブジェクトを使用します。コード内で DateTime オブジェクトを渡す方がはるかに優れており、日付形式 (US/UK など) との混乱を防ぐことができます。

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);
}
于 2012-08-13T15:41:06.033 に答える
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>

しかし、私はそれが機能すると思います...

于 2012-08-13T16:00:27.887 に答える