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 日的结果是:“10 月 1 日最后一次发生在 2012 年”。

对于 6 月 11 日,作为一个随机示例:“上次 6 月 11 日发生在 2013 年。”

所有日期结果均为 TRUE,但2 月 29 日的结果除外:“3 月 1 日最后一次发生在 2013 年。” 显然,这是一个错误的陈述,因为期望的结果是:“2 月 29 日最后一次发生在 2012 年”。

我有点卡住了,添加真正的闰年结果的最佳方法是什么?

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 回答
0
$month = 9;
$day = 1;

$timestamp = mktime(0, 0, 0, $month, $day);
if ($timestamp > time()) {
$timestamp = mktime(0, 0, 0, $month, $day, date('Y') - 1);
}
covert timestamp to your desire format.
于 2013-08-26T06:29:46.890 回答