2009-02-13 8 views
5

बिट इस बारे में अटकने के बारे में अटक गया। वर्तमान माह को देखते हुए, मुझे हर महीने चौथे शनिवार की तारीख वापस करने की जरूरत है।वर्तमान महीने में चौथे शनिवार की तारीख को

उदा। यह महीना 20 फरवरी होगा, अगला 27 मार्च होगा।

धन्यवाद

+0

संयोग से यह फरवरी और मार्च दोनों के लिए 28 वां होगा। – kmkaplan

+0

इतनी आकस्मिक रूप से नहीं दिया गया कि फरवरी में 28 दिन हैं जो 7 तक विभाजित हैं। पाठ्यक्रम के लीप वर्षों तक नहीं पकड़ते हैं। –

उत्तर

7

मैं नहीं एक PHP सांकेतिक शब्दों में बदलनेवाला, तथापि, ऐसा लगता है strtotime क्या आप के बाद कर रहे हैं है।

आप स्ट्रेटोटाइम ("चौथा शनिवार") का उपयोग कर सकते हैं और यह 4 वें शनिवार को वापस आ जाएगा।

strtotime दस्तावेज़ देखें।

संपादित करें:

बस जवाब पूरा करने के लिए, टॉम और पॉल डिक्सन के लिए धन्यवाद

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

लिंक के अनुसार, कोई संकेत नहीं है कि" चौथा शनिवार "सटीक रूप से विश्लेषण करेगा। – Elie

+0

हालांकि यह काम करता है। मैंने PHP स्रोत की जांच की स्पष्टीकरण के लिए, लेकिन यह एक पठनीय yacc जेनरेट पार्सर है। इसका उल्लेख करने के लिए मेरा जवाब संशोधित किया गया है। –

+0

हाँ यह काम करता है, आप डेट ('डीएस एफ', स्ट्रेटोटाइम ('चौथा शनिवार' .डेट ('एफ ओ') जैसी कुछ कर सकते हैं।)); और यह एक इलाज की तरह काम करता है। – Tom

2

महीने के पहले शनिवार का पता लगाएं, और फिर उस करने के लिए तीन सप्ताह जोड़ें।

यदि आपको नहीं पता कि पहला शनिवार कब है (या, बल्कि, विशेष रूप से दिन के नाम से संबंधित तारीख को नहीं जानते), तो आप Doomsday algorithm पर देखना चाहेंगे, जिसे मैंने आसानी से दूसरे के लिए देखा कुछ हद तक इसी तरह के मुद्दे के साथ पोस्ट करें।

3

चौथे शनिवार के लिए सबसे पुरानी तारीख महीने का 22 वां है। तो 22 वें देखें, देखें कि यह सप्ताह का दिन है, अगर यह शनिवार नहीं है, तो दिन में एक दिन जोड़ें, और फिर से जांचें, जब तक आपको कोई मैच न मिले (अधिकतम आपको 6 दिनों की जांच करनी होगी)।

-1
छद्म कोड पीएचपी बजाय

(लगता है 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

यह क्यों कम हो गया? यह "! = शनिवार" होना चाहिए "!= रविवार ", लेकिन प्रक्रिया सही दिखती है ... –

+0

पूरी तरह से सैट/सन चीज से चूक गई, tah – ShuggyCoUk

7

आप strtotime उपयोग कर सकते हैं "अगले शनिवार" एक प्रारंभिक तिथि के आधार पर लगता है। कि प्रारंभिक तिथि जल्द से जल्द संभव पूर्ववर्ती दिन (21) हम जवाब पाने से पहले दिन है ...

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

जल्द से जल्द संभव किसी भी महीने में एक दिन के 4 दोहराने 22 (1,8,15 है, 22), आखिरी संभव 4 वां दोहराव 28 वां (7,14,21,28) है।

संपादित: यद्यपि यह दस्तावेज में स्पष्ट नहीं है, तो आप "चौथे शनिवार" भी अनुरोध कर सकते हैं - आधार के रूप में महीने के zeroth दिन का उपयोग करें:

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

या आधार समय को छोड़ देते हैं और माह और वर्ष का सीधे उल्लेख:

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

रॉबिन के लिए टोपी की टिप दिवस खोलना के लिए "मैं एक PHP सांकेतिक शब्दों में बदलनेवाला नहीं कर रहा हूँ" है कि :)

+0

आपका समाधान सही है, लेकिन आपकी दूसरी वाक्य में मुझे लगता है कि आपका मतलब है "... नवीनतम संभव तीसरा शुक्रवार (21 वीं) ..."। :-) –

+0

इसे बेहतर हां, संशोधन –

0
function fourth_saturday($year, $month) 
{ 
    $info = localtime(mktime(0, 0, 0, $month , 1, $year)); 
    return 28 - $info[6]; 
} 
संबंधित मुद्दे