簡體   English   中英

PHP查找最近的特定日期

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM