[英]PHP find closest specific day to date
我正在編寫一個腳本,該腳本可以獲取有關今年某個日期的網站的一些統計數據,但我也希望它可以獲取去年最近的相應日期的數據,以便可以對其進行比較。
例如,如果我要獲取“ 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時間戳。
但是我不確定從哪里開始使用該功能。
我不是在尋找有人為我編寫函數,但是如果有人對從哪里開始有任何想法(即使是朝着正確的方向輕推),那就太好了!
我相信這樣做。 首先我們得到去年同一天的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 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日不是星期一。 :)
我明白了,它去了:
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));
}
回聲getClosestDay(mktime(0,0,0,12,14,2011));
嘗試這個
function getClosestDay($date,$day=0) {
$days = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
return strtotime('last ' . $days[$day], $date);
}
這是一個不太優雅但經過測試的功能:
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;
}
您嘗試過strtotime嗎?
strtotime('-1 year',time());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.