PHP查找最接近日期的特定日期
我正在写一个脚本,它可以获取今年某个日期我的网站的一些统计数据,但我也希望它能够为我提供去年最接近的相应日期的数据,以便我可以比较它们 例如,如果我要获得“2011年12月14日星期三”的数据,我还想获得“2010年12月15日星期三”的数据 我在思考如何从今年的日期中获得正确的日期时遇到了一些麻烦。我希望能够将数据传递到函数中,例如:PHP查找最接近日期的特定日期,php,Php,我正在写一个脚本,它可以获取今年某个日期我的网站的一些统计数据,但我也希望它能够为我提供去年最接近的相应日期的数据,以便我可以比较它们 例如,如果我要获得“2011年12月14日星期三”的数据,我还想获得“2010年12月15日星期三”的数据 我在思考如何从今年的日期中获得正确的日期时遇到了一些麻烦。我希望能够将数据传递到函数中,例如: // $date as a unix timestamp // $day (0 for Sunday through 6 for Saturday) funct
// $date as a unix timestamp
// $day (0 for Sunday through 6 for Saturday)
function getClosestDay($date,$day=0) {
}
因此,我将传入去年日期的unix时间戳,以及我要查找的日期。我希望它返回正确日期的unix时间戳
但我甚至不知道从哪里开始使用这个函数
我不是在找人为我写函数,但如果有人对从哪里开始有任何想法(甚至是朝正确的方向轻推),那就太好了 你试过Strottime吗
strotime('-1年',time())代码>我知道了,它是这样的:
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))
我相信这样就可以了。首先,我们得到了去年同一天的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
试试这个
function getClosestDay($date,$day=0) {
$days = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
return strtotime('last ' . $days[$day], $date);
}
以下是我的想法:
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)
函数getClosestDate($date,$day=0,$year=-1){
$cts=标准时间($date);
$ts=strotime(“{$year}year”,$cts);
$days=数组(
"星期日",,
“星期一”,
"星期二",,
“星期三”,
"星期四",,
“星期五”,
“星期六”,
);
$day=$days[$day];
$prev=strotime(“上一个{$day}”,$ts);
$next=strotime(“next{$day}”,$ts);
$prev_差距=$ts-$prev;
$next_gap=$next-$ts;
返回$prev_gap<$next_gap?$prev:$next;
}
回音日期('Y-m-d',getClosestDate('2011-12-12',1));
//打印2010-12-13(最接近2010-12-12的星期一)
回音日期('Y-m-d',getClosestDate('2011-12-12',4));
//打印2010-12-09(最接近2010-12-12的星期四)
顺便说一句(幸运的是,2011年12月14日不是星期一。) 这里有一个不太优雅但经过测试的功能:
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;
}
那会发现我和去年是同一天。我想要最接近去年同一天的日期。正如我上面的例子所述:如果我要获取“2011年12月14日星期一”的数据,我还想获取“2010年12月13日星期一”的数据。1年1天不起作用,并不总是-1年1天,这完全取决于传入的日期。同样,如果我这样做,传入“2011年12月14日星期一”将返回我“2010年12月14日星期二”,这不是我想要的。我想要最接近那个日期的星期一(或者我选择在函数中放置的任何其他日期)。现在它可以工作了,尽管我更喜欢netcoder和Kristian Antonsen的方法-所以如果需要,我可以选择日期。不过谢谢:)太棒了-解决差异似乎是最好的方法!谢谢沙哈,很明显我在日历上看错了日期<代码>2011年12月14日星期一,您能解释一下吗?根据我Mac电脑的时钟,是星期三。是的,我的约会搞错了,抱歉!