2009-02-13 6 views
5

Bit stecken wie darüber zu gehen. Angesichts des aktuellen Monats muss ich das Datum des vierten Samstages jedes Monats zurückgeben.erarbeiten Sie das Datum des vierten Samstag im aktuellen Monat

z.B. Dieser Monat wäre der 20. Februar, der nächste wäre der 27. März.

Dank

+0

Übrigens wäre es der 28. für Februar und März. – kmkaplan

+0

Nicht so zufällig, da der Februar 28 Tage hat, was durch 7 teilbar ist. Das gilt natürlich nicht für Schaltjahre. –

Antwort

7

Ich bin kein PHP-Coder, aber es scheint strtotime ist das, was Sie nach.

Sie können strtotime ("viertes Samstag") verwenden und es wird den 4. Samstag zurückgeben.

Überprüfen Sie die strtotime Dokumente.

EDIT:

nur die Antwort komplett zu machen, dank Tom und Paul Dixon

date('dS F',strtotime('Fourth Saturday '.date('F o'))); 
+0

Laut dem Link gibt es keinen Hinweis, dass" viertes Samstag "würde genau analysieren. – Elie

+0

Es funktioniert aber.Ich überprüfte die PHP-Quelle Zur Klarstellung, aber es ist ein lesbarer yacc-generierter Parser. Habe meine Antwort geändert, um sie zu erwähnen. –

+0

Ja, es funktioniert, du kannst etwas wie date ('dS F', strtotime ('Vierter Samstag' .date ('F o'))), und es funktioniert wie ein Leckerbissen – Tom

2

den ersten Samstag im Monat finden, und dann drei Wochen, dass hinzufügen.

Wenn Sie nicht wissen, wann der erste Samstag ist (oder eher nicht genau ein Datum kennen, das einem Tagesnamen entspricht), sollten Sie sich die Doomsday algorithm ansehen, die ich bequemerweise für eine andere angesehen habe Post mit einem etwas ähnlichen Problem.

3

Der früheste Termin für den vierten Samstag ist der 22. des Monats. Also schauen Sie sich den 22. an, welchen Wochentag es gibt, wenn es nicht Samstag ist, fügen Sie einen Tag zum Datum hinzu und überprüfen Sie noch einmal, bis Sie ein Spiel finden (maximal müssten Sie 6 Tage checken).

-1

in PHP eher als Pseudo-Code (man denke erfordert 5,2)

$date = getdate(); 
$date-> setDate($date->format('Y'), $date->format('Y'), '1'); // 1st of month. 
while ($date->format('w' != 6) 
    $date->modify("+1 day"); 
$date->modify("+21 day"); // date is now on the fourth saturday 
+0

Warum wurde das heruntergeregelt? Es sollte "! = Samstag" statt "!" Sein!= Sunday ", aber der Prozess sieht korrekt aus ... –

+0

total verpasst die Sat/Sun-Sache, tah – ShuggyCoUk

7

Sie können strtotime verwenden, um "nächsten Samstag", basierend auf einem Startdatum zu finden. Wenn das Startdatum ist der Tag vor dem frühestmöglichen Vortages (21) erhalten wir die Antwort ...

//required year/month 
$yyyymm="2009-01"; 

//find next saturday after earliest possible date 
$t=strtotime("next saturday", strtotime("{$yyyymm}-21")); 

//here you go! 
echo "4th saturday of $yyyymm is ".strftime("%Y-%m-%d",$t)."\n"; 

Frühestmöglicher 4. Wiederholung eines Tages in einem Monat ist die 22. (1,8,15, 22), letzte mögliche 4. Wiederholung ist 28. (7,14,21,28).

EDIT: Obwohl es in der Dokumentation nicht klar ist, können Sie den „vierten Samstag“ fordern - die nullteen Tag des Monats als Grundlage verwenden:

$t=strtotime("fourth saturday", strtotime("{$yyyymm}-00")); 

oder die Basis Zeit auslassen und geben Sie den Monat und das Jahr direkt:

$t=strtotime("fourth saturday feb 2009"); 

Spitze des Hutes zu Robin „ich bin kein PHP-Coder“ Tag für das Auffinden, dass :)

+0

Ihre Lösung ist richtig, aber in Ihrem zweiten Satz denke ich, Sie meinen "... der letzte mögliche 3. Freitag (21.) ..." :-) –

+0

könnte es besser formuliert werden ja, wird ändern –

0
function fourth_saturday($year, $month) 
{ 
    $info = localtime(mktime(0, 0, 0, $month , 1, $year)); 
    return 28 - $info[6]; 
}