2011-04-20 5 views
16

मैं वर्तमान माह से पहले महीने की संख्या प्राप्त करने की कोशिश कर रहा हूं (अब 04 (अप्रैल) है, इसलिए मैं 03 प्राप्त करने का प्रयास कर रहा हूं)। मैं यह कोशिश कर रहा हूं:वर्तमान महीने से पहले महीने की संख्या प्राप्त करने का प्रयास

date('m')-1; 

लेकिन मुझे 3 मिल गया है। लेकिन मैं चाहता हूं कि 03 प्राप्त करें।

+2

* (संकेत) * ' तिथि 'एक स्ट्रिंग के लिए एक तारीख स्वरूपित करता है। स्ट्रिंग पर अंकगणित का उपयोग करते समय, स्ट्रिंग को पूर्णांक में परिवर्तित कर दिया जाता है। अब आप बाकी को समझने में सक्षम होना चाहिए। – Gordon

+0

आप इस तरह से उपयोग नहीं कर सकते हैं। उदाहरण के लिए 'जनवरी' के बारे में सोचें ... '1-1 0 0 दिसंबर नहीं है (' 12') –

उत्तर

31

सही तरीका वास्तव में यह करने के लिए:

+0

यह ठीक @ जनवरी होगा? –

+0

इसके साथ समस्या यह है कि उदाहरण के लिए 'मार्च' के साथ यह '03' नहीं '3' –

+1

** ** ** ** ** ** ** को बदल देगा यदि आपको शून्य के बिना महीने की आवश्यकता है। 'दिनांक ('एन', स्ट्रेटोटाइम ('- 1 महीने'));' - [स्रोत] (http://ca.php.net/manual/en/function.date.php) –

0

आपकी गणना का परिणाम एक संख्या है। आप एक स्ट्रिंग की तरह यह स्वरूपित करना चाहते हैं, तो आप उपयोग कर सकते हैं:

$result = date('m')-1; 
$string_result = sprintf("%02s", $result); 

संपादित करें: ध्यान दें कि यह केवल एक स्ट्रिंग की तरह एक नंबर फ़ॉर्मेट करने के लिए एक आंशिक समाधान है।

$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"), date("Y")); 
+0

क्या आप वाकई अच्छे समाधान हैं? –

+1

-1 मुझे यकीन नहीं है कि यह एक अच्छा समाधान है। दिनांक ('एम') 04 देता है, और फिर आप 04-1 = 3 लेते हैं। लेकिन जनवरी 01-1 = 0 के साथ क्या होता है ??? स्ट्रेटोटाइम के साथ संशोधित दिनांक बनाना बेहतर है और फिर इसे तारीख के साथ सिंटैक्स करें। – Johan

+0

@ कोल। श्रापनेल, @ जोहान आप सही हैं, यह केवल स्ट्रिंग की तरह एक संख्या को प्रारूपित करने का एक समाधान है। मैंने तदनुसार जवाब संपादित किया है। – jeroen

-2

यह यह तुम्हारे लिए क्या करना चाहिए ...

str_pad(date('m')-1, 2, '0', STR_PAD_LEFT); 
1

आप आश्चर्यचकित हो सकता है, लेकिन date() function manual page आपको क्या चाहिए की एक सटीक उदाहरण है है:

date('m', strtotime('-1 month'));

के रूप में आप करेंगे जनवरी में अन्य उत्तरों के साथ अजीब चीजें होती हैं।

+0

सटीक उदाहरण कहां है? मैं इसे आसानी से नहीं देख सकता। लिंक सिर्फ मैन पेज के शीर्ष पर जाता है। – Treffynnon

+0

@Treffynnon पिछले महीने का टाइमस्टैम्प प्राप्त करने का एक उदाहरण है। हालांकि, आपके होमवर्क के लिए स्वरूपण छोड़ा गया है, हाँ –

+2

मुझे लगता है कि यह लाइन है जिसका मतलब आप '$ lastmonth = mktime (0, 0, 0, दिनांक (" एम ") - 1, दिनांक (" डी "), दिनांक (" Y "));'। @Glebushka विधि मेरी राय में पढ़ने के लिए आसान है। – Treffynnon

-1

यह भी काम करता है।

printf("%02s", (date('m') - 1)); 
+0

अपने स्वयं के कार्यों को शुरू करने से पहले अन्य उत्तरों को पढ़ने से बेहतर –

2

वर्तमान में स्वीकार प्रतिक्रिया एक गलत जवाब में परिणाम होगा जब भी महीने के दिन (वर्तमान दिन के लिए) पिछले महीने के महीने के अंतिम दिन से एक बड़ी संख्या है।

उदा 2 9 मार्च (0 9 गैर-लीप-वर्ष में) date('m', strtotime('-1 month')); निष्पादित करने का परिणाम 03 होगा, क्योंकि फरवरी के लिए महीने के किसी भी दिन से 2 9 बड़ा है, और इस प्रकार strtotime('-1 month') वास्तव में 1 मार्च को वापस आ जाएगा।

इसके बजाय, निम्न का उपयोग करें: के लिए

date('n') - 1; 
+0

हाँ सही है, लेकिन यह जनवरी पर 0 पर वापस आ जाएगा ... दिनांक ("एन", स्ट्रेटोटाइम ("पिछले महीने का पहला दिन"); ऐसा करने का एक अच्छा तरीका है। –

0
intval(date('m')) 
चालू माह

(intval(date('m'))-1)%12 

पिछले महीने के लिए

, दिसंबर/जनवरी

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