2010-12-05 5 views
10

के साथ एक महीने में पहले सप्ताह का दिन प्राप्त करना मैं strtotime का उपयोग करके किसी दिए गए महीने के पहले बुधवार को जानने की कोशिश कर रहा हूं, लेकिन पहली बार बुधवार को पहली बार बुधवार को होने पर विफल होता है।स्ट्रेटोटाइम

12/06/10 
12/07/10 
12/08/10 
12/02/10 
12/03/10 
12/04/10 
12/05/10 

सूचना कुछ: में

$mon = strtotime("December 2010 first monday"); 
$tue = strtotime("December 2010 first tuesday"); 
$wed = strtotime("December 2010 first wednesday"); 
$thu = strtotime("December 2010 first thursday"); 
$fri = strtotime("December 2010 first friday"); 
$sat = strtotime("December 2010 first saturday"); 
$sun = strtotime("December 2010 first sunday"); 

echo strftime("%m/%d/%y", $mon) . "<br>"; 
echo strftime("%m/%d/%y", $tue) . "<br>"; 
echo strftime("%m/%d/%y", $wed) . "<br>"; 
echo strftime("%m/%d/%y", $thu) . "<br>"; 
echo strftime("%m/%d/%y", $fri) . "<br>"; 
echo strftime("%m/%d/%y", $sat) . "<br>"; 
echo strftime("%m/%d/%y", $sun) . "<br>"; 

परिणाम:

इस समस्या की एक अधिक सामान्य उदाहरण के लिए, निम्न कोड और परिणाम को देखने के? सप्ताह के एक दिन में महीने के पहले के साथ मेल नहीं होना चाहिए? लेकिन यह कभी नहीं करता है, और इसके बजाय 8 वें दिन, दिन का दूसरा उदाहरण हमेशा वापस आ जाता है।

किसी के पास इसके लिए कोई स्पष्टीकरण है?

उत्तर

8

मैं किसी भी स्पष्टीकरण के रूप में मैं भी हैरत कर रहा हूँ इसलिए की तरह नहीं है, लेकिन मुझे लगता है पता लगाने के लिए आप को छोड़ते हुए "पहली" द्वारा सही दिनांक पाने में कामयाब रहे,:

$ php -r 'echo date("m/d/y", strtotime("December 2010 Wednesday"));' 
12/01/10 

$ php -r 'echo date("m/d/y", strtotime("December 2010 Thursday"));' 
12/02/10 

$ php -r 'echo date("m/d/y", strtotime("December 2010 Friday"));' 
12/03/10 

$ php -r 'echo date("m/d/y", strtotime("December 2010 Saturday"));' 
12/04/10 

$ php -r 'echo date("m/d/y", strtotime("December 2010 Sunday"));' 
12/05/10 

$ php -r 'echo date("m/d/y", strtotime("December 2010 Monday"));' 
12/06/10 

$ php -r 'echo date("m/d/y", strtotime("December 2010 Tuesday"));' 
12/07/10 
+0

यकीन है कि, यह काम करता है। आइए पूछें क्यों नहीं ... – Yarin

+0

ठीक है आप PHP स्रोत कोड देख सकते हैं यदि आप वास्तव में उत्सुक हैं, मेरे लिए, चलो आगे बढ़ें: डी –

+0

यह पूरी तरह से काम नहीं कर रहा है। मैं 12 जून को इस समाधान का उपयोग कर रहा हूं और मुझे '12/15/2014' मिलता है। शायद यह वर्तमान के महीने के सप्ताह के सापेक्ष है? – Webnet

5

यह सिर्फ अपने स्वरूपण जो गलत है।

echo strftime("%m/%d/%y", strtotime("first Monday of December 2010")); 
echo strftime("%m/%d/%y", strtotime("first Tuesday of December 2010")); 
echo strftime("%m/%d/%y", strtotime("first Wednesday of December 2010")); 
echo strftime("%m/%d/%y", strtotime("first Thursday of December 2010")); 
echo strftime("%m/%d/%y", strtotime("first Friday of December 2010")); 
echo strftime("%m/%d/%y", strtotime("first Saturday of December 2010")); 
echo strftime("%m/%d/%y", strtotime("first Sunday of December 2010")); 

प्रिंटों:: आप of शामिल करने की ज़रूरत

12/06/10 
12/07/10 
12/01/10 
12/02/10 
12/03/10 
12/04/10 
12/05/10 

स्वीकार कर लिया समाधान काम करता है, लेकिन आप समस्याओं का सामना करता है, तो आप दूसरे काम करने के दिन को खोजना चाहते थे होगा:

echo strftime("%m/%d/%y", strtotime("December 2010 second Wednesday")); 

प्रिंटों:

12/15/10 

कुछ डॉक्स में दिये गये उदाहरण हैं:

http://www.php.net/manual/en/datetime.formats.relative.php

ऊपर दस्तावेज में नोटों के दूसरे खंड बताते हैं कि कैसे of तारीख गणना प्रक्रिया को प्रभावित करता है:

भी देख सकते हैं कि "की "इन" टर्मिनल स्पेस डेनाम स्पेस '' और '' अंतिम ' स्पेस डेनाम स्पेस' ' कुछ विशेष है।

  1. यह करने के लिए 1.
  2. " 'के' क्रमसूचक dayname" के दिन के अनुसार महीने के सेट एक और दिन के लिए अग्रिम नहीं करता है। (उदाहरण: "जुलाई 2008 का पहला मंगलवार" का अर्थ है "2008-07-01")।
  3. "ordinal dayname" किसी अन्य दिन आगे बढ़ता है। (उदाहरण: "पहला tuesday जुलाई 2008" का अर्थ है "2008-07-08", ऊपर दी गई सूची में 4 बिंदु भी देखें)।
  4. "'अंतिम' दिन का 'नाम' 'चालू महीने का अंतिम दिन का नाम लेता है। (उदाहरण: "जुलाई 2008 के अंतिम wed" का अर्थ है "2008-07-30")
  5. "अंतिम 'दिन का नाम" वर्तमान दिन से अंतिम दिन का नाम लेता है। (उदाहरण: "अंतिम wed जुलाई 2008" का अर्थ है "2008-06-25"; "जुलाई 2008" पहली बार "2008-07-01" और की वर्तमान तिथि सेट करता है तो "अंतिम wed" पिछले पर चलता है बुधवार जो "2008-06-25" है)।
+1

'का' प्रारूप केवल PHP> = 5.3 पर काम करता है, और 5.2 पर विफल रहता है। परीक्षण परिणामों के लिए मेरा जवाब देखें। – Yarin

+1

@Yarin: अच्छी तरह से देखा। > = 5.3 में दिनांक हैंडलिंग पिछले संस्करणों की तुलना में अधिक विश्वसनीय है। यह एक शर्म की बात है कि इतने सारे संभावित नुकसान हैं। – Mike

10

प्रदान की उत्तर बंद का निर्माण, एक php 5.2 और php 5.3 के बीच सापेक्ष तिथि स्वरूपण में अंतर के बारे में पता होना चाहिए।

टेस्ट:

$date1 = strtotime("first wednesday of 2010-12"); 
$date2 = strtotime("first wednesday 2010-12"); 
$date3 = strtotime("wednesday 2010-12"); 

5,2 परिणाम:

1969-12-31 
2010-12-08 
2010-12-01 

5,3 परिणाम:

2010-12-01 
2010-12-08 
2010-12-01 

इसलिए केवल वें ई तीसरी विधि PHP 5 संस्करणों में सही परिणाम देता है।

1

मुझे यह पुस्तिका PHP मैनुअल में मिली है।

"5.2.7 से पहले PHP 5 में, एक महीने में दिए गए सप्ताहांत की दी गई घटना का अनुरोध करते हुए, उस सप्ताह का पहला दिन महीने का पहला दिन गलत समय पर लौटाए गए टाइमस्टैम्प में एक सप्ताह जोड़ देगा। इसे ठीक किया गया है 5.2.7 और बाद के संस्करण। "

0

पीएचपी 5.5.11

$firstWeekdayOfMonth = new DateTime('first weekday 0 jun 2016');

मैं पता नहीं क्यों, लेकिन बल के शून्य तरह strtotime पार्सर पहले दिन पर विचार महीने की शुरुआत में शुरू करने के लिए।

संबंधित मुद्दे