2009-02-13 18 views
5

Bu konuda nasıl gidileceğini anladım. Bu ay göz önüne alındığında, her ayın dördüncü cumartesi gününü iade etmem gerekiyor., bu ayın dördüncü cumartesi gününü yayınlıyor

örn. Bu ay 20 Şubat olur, sonraki 27 Mart olur.

Teşekkür

+0

Bu arada, hem şubat hem de mart için 28. olurdu. – kmkaplan

+0

O kadar da tesadüfen değil ki, Şubat'ın 28 gün içinde ayrılabildiğini belirtmek gerekir. 7. Sıçram yıllarca beklemez. –

cevap

7

değil PHP kodlayıcı, ancak strtotime sonra ne konum gibi görünüyor.

Strtotime'ı ("dördüncü cumartesi") kullanabilirsiniz ve 4. cumartesi günü dönecektir.

strtotime belgelerine göz atın.

DÜZENLEME:

Sadece cevap komple Tom ve Paul Dixon sayesinde

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

Bağlantısına göre," dördüncü Cumartesi "doğru ayrıştıracaktır hiçbir gösterge yoktur. – Elie

+0

Bu işe yarar. açıklama için ama okunabilir bir yacc tarafından üretilen ayrıştırıcıdır.Yanmak için benim cevabımı değiştirdim. –

+0

Evet, işe yarar, tarih gibi bir şey yapabilirsiniz ('dS F', strtotime ('Dördüncü Cumartesi' .date ('F o'))) ve bir muamele gibi çalışır – Tom

2

ayın ilk Cumartesi bulun ve sonra o üç hafta ekleyin.

İlk cumartesi ne zaman olduğunu bilmiyorsanız (veya bir gün adıyla ilgili bir tarih bilmediyseniz), Doomsday algorithm'a bakabilirim. biraz benzer bir konu ile postalayın.

3

Dördüncü Cumartesi gününün en erken tarihi ayın 22'si. Bu yüzden, 22. güne bakın, haftanın hangi günü olduğunu, cumartesi değilse, tarihe bir gün ekleyin ve bir eşleşme bulana kadar tekrar kontrol edin (en fazla 6 gün sonra kontrol etmelisiniz). Ben PHP yerine sahte kodda

-1

(düşünmek 5.2 gerektirir)

$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

Neden bu durum reddedildi? "! = Cumartesi" yerine "!"= Pazar ", ancak süreç doğru görünüyor ... –

+0

tamamen Sat/Sun şeyi kaçırdı, tah – ShuggyCoUk

7

Bir başlangıç ​​tarihine göre "sonraki cumartesi" bulmak için strtotime kullanabilirsiniz yapmak. Bu başlangıç ​​tarihi ... mümkün olan en erken önceki gün (21) biz cevap almak bir gün önce ise

//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"; 

herhangi bir ayda bir gün olası 4 tekrarlama 22 (1,8,15 olduğunu Erken, 22), son olası 4. tekrar 28'dir (7,14,21,28).

DÜZENLEME: Bu belgelerde açıkça olmasa da, siz de "dördüncü cumartesi" talep edebilirsiniz - temel olarak ayın sıfırıncı gün kullanın:

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

veya baz süresini ihmal ve doğrudan ay ve yıl belirtin: lekelenme için Gün "Ben bir PHP coder değilim" Robin şapka

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

ipucu

:) o
+0

Sizin çözümünüz doğrudur, ama ikinci cümlenin içinde "… mümkün olan en son 3. Cuma (21.)…" demek istediğini düşünüyorum. :-) –

+0

daha iyi bir şekilde ifade edilebilir, değiştirmek –

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