我正在制作一个脚本,用于确定最近发生的特定日历日期。
这篇文章Get the year of a specified month in previous 12 months?是我目前测试版的基础。它是为月度结果编写的,而不是具体日期。
<?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日: “2013年3月1日发生在2013年。” 显然,这是一个错误的陈述,因为期望的结果是: “2月29日最后一次发生在2012年。”
我有点卡住了,添加真正的闰年结果的最佳方法是什么?
答案 0 :(得分: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
答案 1 :(得分: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.