我正在编写一个脚本,可以获取有关我的网站今年某个日期的统计信息,但我也想让它获取去年最近的相应日期的数据,以便我可以对它们进行比较。
例如,如果我要获取“2011年12月14日星期三”的数据,我还想获得“2010年12月15日星期三”的数据。
我在考虑如何从今年的日期获得正确的日期时遇到了一些麻烦。我希望能够将数据传递给函数,例如:
// $date as a unix timestamp
// $day (0 for Sunday through 6 for Saturday)
function getClosestDay($date,$day=0) {
}
所以我会传递去年日期的unix时间戳,也是我想找的那一天。我希望它能返回正确日期的unix时间戳。
但我不确定从哪里开始使用该功能。
我不是在寻找有人为我写这个功能,但是如果有人对从哪里开始有任何想法(即使是朝着正确的方向推进),那就太棒了!
答案 0 :(得分:4)
我相信这样做。首先我们得到去年同一天的unix时间
$newDate = '14th Dec 2011';
$newDate = strtotime($newDate);
$oldDate = strtotime('-1 year',$newDate);
现在我们发现工作日的差异。在这个例子中,它将是-1
$newDayOfWeek = date('w',$oldDate);
$oldDayOfWeek = date('w',$newDate);
$dayDiff = $oldDayOfWeek-$newDayOfWeek;
然后我们将这个差异提取/添加到日期
$oldDate = strtotime("$dayDiff days",$oldDate);
并输出
print date('r',$oldDate)."\n";
print date('r',$newDate)."\n";
以上应该产生
Wed, 15 Dec 2010 00:00:00 +0100
Wed, 14 Dec 2011 00:00:00 +0100
答案 1 :(得分:2)
以下是我提出的建议:
function getClosestDate($date, $day = 0, $year = -1) {
$cts = strtotime($date);
$ts = strtotime("{$year} YEAR", $cts);
$days = array(
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
);
$day = $days[$day];
$prev = strtotime("PREVIOUS {$day}", $ts);
$next = strtotime("NEXT {$day}", $ts);
$prev_gap = $ts - $prev;
$next_gap = $next - $ts;
return $prev_gap < $next_gap ? $prev : $next;
}
echo date('Y-m-d', getClosestDate('2011-12-12', 1));
// prints 2010-12-13 (closest Monday to 2010-12-12)
echo date('Y-m-d', getClosestDate('2011-12-12', 4));
// prints 2010-12-09 (closest Thursday to 2010-12-12)
顺便说一句(幸运的是),2011年12月14日不是星期一。 :)
答案 2 :(得分:1)
我明白了,在这里:
function getClosestDay($date) {
$w = date("w", strtotime("-1 year", $date));
$week = date("w", $date);
$days = ($week - $w);
return date("Y-m-d l", strtotime($days . " days -1 year", $date));
}
echo getClosestDay(mktime(0,0,0,12,14,2011));
答案 3 :(得分:0)
试试这个
function getClosestDay($date,$day=0) {
$days = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
return strtotime('last ' . $days[$day], $date);
}
答案 4 :(得分:0)
这是一个不太优雅但经过测试的功能:
function getClosestDay($time,$dayOfTheWeek) {
$last_year=strtotime("last year",$time);
$next=strtotime("next $dayOfTheWeek",$last_year);
$last=strtotime("previous $dayOfTheWeek",$last_year);
$most_near = (min($next-$last_year,$last_year-$last) == ($next-$last_year)) ? $next : $last;
return $most_near;
}
答案 5 :(得分:-1)
你试过strtotime吗?
strtotime('-1 year',time());