Geçerli haftanın Pazartesi ve Cuma için tarih alın (PHP)

3 Cevap php

Nasıl Geçerli haftanın Pazartesi ve Cuma için tarih alabilirim?

Aşağıdaki kodu var ama geçerli gün Pazar veya Cumartesi ise başarısız.

$current_day = date("N");
$days_to_friday = 5 - $current_day;
$days_from_monday = $current_day - 1;
$monday = date("Y-m-d", strtotime("- {$days_from_monday} Days"));
$friday = date("Y-m-d", strtotime("+ {$days_to_friday} Days"));

3 Cevap

Bu strtotime girişler çok iyi çalışır:

strtotime( "next monday" );
strtotime( "previous monday" );
strtotime( "today" );
strtotime( "next friday" );
strtotime( "previous friday" );

Yapmanız gereken tüm ifadeler ise bazı iç mantığı sarılmasıdır.

Bu soru bir DateTime cevap gerekiyor: -

/**
 * @param String $day
 * @return DateTime
 */
function getDay($day)
{
    $days = ['Monday' => 1, 'Tuesday' => 2, 'Wednesday' => 3, 'Thursday' => 4, 'Friday' => 5, 'Saturday' => 6, 'Sunday' => 7];

    $today = new \DateTime();
    $today->setISODate($today->format('o'), $today->format('W'), $days[ucfirst($day)]);
    return $today;
}

Usage:

var_dump(getDay('Monday')->format('l dS F Y'));
var_dump(getDay('Friday')->format('l dS F Y'));

Output:

string 'Monday 30th September 2013' (length=26)
string 'Friday 04th October 2013' (length=24)

See it working

Bu gerçekten a week nasıl tanımladığına bağlıdır ama ben size en yakın "Pazartesi" veya "Cuma" (ya da bu konuda herhangi bir gün) için tarih verecektir ki bu fonksiyon ile geldi:

function closestDate($day){

    $day = ucfirst($day);
    if(date('l', time()) == $day)
        return date("Y-m-d", time());
    else if(abs(time()-strtotime('next '.$day)) < abs(time()-strtotime('last '.$day)))
        return date("Y-m-d", strtotime('next '.$day));
    else
        return date("Y-m-d", strtotime('last '.$day));

}

Girdi: Haftanın bir günü ("Pazar", "Pazartesi", vb)

Çıktı: Ben yakın "Pazar" ve bugün için istenirse olduğunu:

  1. "Pazar": Ben bugünün tarihini alacak
  2. "Pazartesi": Ben dünün tarihi alacak
  3. "Cumartesi: Ben yarının tarihini alacak

Bu yardımcı olur umarım :)