0

特定のカレンダーの日付が最近いつ発生したかを判断するスクリプトに取り組んでいます。

この投稿、過去 12 か月の特定の月の年を取得しますか? 、現在のベータ版の基礎です。これは、特定の日付ではなく、毎月の結果のために書かれています。

<?php
if (empty($_GET['m'])) {
    $m = "October";
} else {
    $m = htmlspecialchars($_GET['m']);
}

if (empty($_GET['d'])) {
    $d = "1";
} else {
    $d = htmlspecialchars($_GET['d']);
}

date_default_timezone_set('America/Los_Angeles');

$m = date('m', strtotime($m));

$c = (mktime(0,0,0,$m,$d) < time())
    ? mktime(0,0,0,$m,$d)
    : mktime(0,0,0,$m,$d,date("Y") -1);

$from = date('F jS', $c) . " last occurred in " . date('Y', $c) . ".";

echo $from;
?>

デフォルト値である 10 月 1 日の結果は、「2012 年に最後に発生した 10 月 1 日」です。

6 月 11 日のランダムな例: 「6 月 11 日が最後に発生したのは 2013 年です。」

2 月 29 日の結果「3 月 1 日が最後に発生したのは 2013 年です」を除いて、すべての日付の結果は TRUEです。望ましい結果は「2012 年に最後に発生した 2 月 29 日」であるため、これは明らかに誤りです。

本当のうるう年の結果を追加する最良の方法は何ですか?

4

2 に答える 2

0

これは昨年の真の年を計算しています。次のコードに置き換えます。

<?php
if (empty($_GET['m'])) {
    $m = "October";
    } else {
    $m = htmlspecialchars($_GET['m']);
}

if (empty($_GET['d'])) {
    $d = "1";
    } else {
    $d = htmlspecialchars($_GET['d']);
}

date_default_timezone_set('America/Los_Angeles');

$y = date('Y');
if($m == "February" && $d == "29") $y = $y - ($y % 4);
$m = date('m', strtotime($m));

$c = (mktime(0,0,0,$m,$d) < time()) ? mktime(0,0,0,$m,$d,$y) : mktime(0,0,0,$m,$d,$y);

$from = date('F jS', $c) . " last occurred in " . $y . ".";

echo $from;
?>

結果

For 2013: Result 2012
For 2012: Result 2012
For 2011: Result 2008
For 2010: Result 2008
于 2013-08-26T06:17:55.410 に答える