2009-09-16 20 views
19

Wie kann ich das Datum für Montag und Freitag für die aktuelle Woche bekommen?Datum für Montag und Freitag für die aktuelle Woche (PHP)

Ich habe den folgenden Code, aber es schlägt fehl, wenn der aktuelle Tag ist Sonntag oder Samstag.

$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")); 
+2

Sind Sie Sonntag als Beginn oder am Ende der Woche zu zählen? – Greg

+0

Am Ende der Woche. – Psyche

Antwort

52

Diese strtotime Eingänge arbeiten sehr gut:

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

Alles was Sie tun müssen, ist die Logik in einige, wenn Aussagen zu wickeln.

+1

nice Ans, aber was will ich Montag von Datum bekommen. als 01-01-2012 wird 2-1-2012 – chhameed

+7

@chhameed: 'strtotime (" next montag ", strtotime (" 2012-01-01 "))'. Der zweite Parameter wird, falls angegeben, als Referenzdatum verwendet. –

+1

Ooh danke viel ... es hat mir wirklich geholfen ..... – chhameed

1

Das hängt davon ab, wie Sie definieren eine Woche aber ich kam mit dieser Funktion, die Ihnen das Datum für den nächsten „Montag“ oder „Freitag“ (oder jeden Tag für diese Angelegenheit) geben:

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)); 

} 

Eingang: ein Tag der Woche ("Sonntag", "Montag", etc.)

Ausgang: Wenn ich für den nächsten "Sonntag" und heute gefragt ist:

  1. „Sunday "Ich w krank heutiges Datum
  2. „Montag“ erhalten: Ich werde die gestrige Datum
  3. „Samstag bekommen: Ich werde die morgige Datum

this helps :)

9

Diese Frage braucht eine Datetime-Antwort erhalten: -

/** 
* @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((int)$today->format('o'), (int)$today->format('W'), $days[ucfirst($day)]); 
    return $today; 
} 

Verbrauch:

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

Ausgang:

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

See it working

0

brauchte ich eine Definition der aktuellen Woche nach ISO 8601. I Montag wollen immer als Montag definiert werden, die diese aktuellen Woche gestartet.

Die folgende Lösung funktioniert für mich sehr gut:

$monday = strtotime(date('o-\WW')); 
$friday = strtotime("next friday",$monday); 

Für $monday, wird diese Methode immer den Montag zurück, die dieser Kalenderwoche gestartet. Leider basiert diese Methode auf PHP 5.1, um das o Datumsformat zu analysieren.

Um an jedem Tag der Woche zu bekommen, Sie könnten versuchen:

function time_for_week_day($day_name, $ref_time=null){ 
    $monday = strtotime(date('o-\WW',$ref_time)); 
    if(substr(strtoupper($day_name),0,3) === "MON") 
     return $monday; 
    else 
     return strtotime("next $day_name",$monday); 
} 

Verbrauch:

time_for_week_day('wednesday'); 
time_for_week_day('friday',strtotime('2014-12-25')); 
0

Wie die Top-Antwort verrät, PHP mit strtotime() Funktion der einfachste Weg ist.

Anstatt jedoch if-Anweisungen zu verwenden, wie er es vorschlägt, können Sie einfach auf den vorherigen Sonntag zurücksetzen und die gewünschten Daten von dort abrufen.

$monday = strtotime('next monday', strtotime('previous sunday')); 
$friday = strtotime('next friday', strtotime('previous sunday')); 
0

Ich war auf der Suche nach einer ähnlichen Sache, außer ich wollte jeden Montag, nicht nur diese Woche. Das habe ich mir ausgedacht:

function getSunday(DateTime $date){ 
    $outdate = clone($date); 
    $day = $date->format("w"); // get the weekday (sunday is 0) 
    $outdate->sub(new DateInterval("P".$day."D")); // subtracting the weekday from the date always gives Sunday 
    return $outdate; 
} 

Es akzeptiert ein beliebiges Datum und gibt den Sonntag. Dann können Sie leicht Tage hinzufügen, um von Montag bis Samstag zu erhalten.

33

beste Lösung wäre:

$monday = date('Y-m-d', strtotime('monday this week')); 
$friday = date('Y-m-d', strtotime('friday this week')); 
+0

Das ist großartig. Vielen Dank. Ist der Job, ist kurz und lesbar –

+0

Das ist viel besser als die angenommene Antwort. Es gibt keinen Unterschied zwischen "Freitag" und "Nächsten Freitag". Sie müssen "Freitag diese Woche" und "Freitag nächste Woche" verwenden – DrDamnit

0

i verwenden:

$first_week_date = date('d F Y', strtotime('next Monday -1 week', strtotime('this sunday'))); 
$last_week_date = date('d F Y', strtotime('next Monday -1 week + 4 days', strtotime('this sunday'))); 
Verwandte Themen