2011-01-15 19 views

उत्तर

38

आप mktime और date उपयोग कर सकते हैं:

$first_minute = mktime(0, 0, 0, date("n"), 1); 
$last_minute = mktime(23, 59, 59, date("n"), date("t")); 

चालू माह के लिए है। यदि आप इसे किसी भी महीने के लिए रखना चाहते हैं, तो आपने तदनुसार माह और दिन पैरामीटर बदल दिया है।

आप हर महीने के लिए यह जनरेट करना चाहते हैं, तो आप सिर्फ पाश कर सकते हैं:

$times = array(); 
for($month = 1; $month <= 12; $month++) { 
    $first_minute = mktime(0, 0, 0, $month, 1); 
    $last_minute = mktime(23, 59, 59, $month, date('t', $first_minute)); 
    $times[$month] = array($first_minute, $last_minute); 
} 

DEMO

+1

मैं लाइन में विश्वास करते हैं "$ last_minute = mktime (23, 59, 0, $ माह, तिथि ('टी', $ first_minute));" आपको "$ first_minute" को "$ माह" के साथ प्रतिस्थापित करने की आवश्यकता है, क्योंकि आप इस महीने में दिनों की संख्या जानना चाहते हैं। –

+2

@ पास्कलक्लेन यह $ first_minute के साथ सही है क्योंकि फ़ंक्शन दिनांक टाइमस्टैम्प को दूसरे तर्क के रूप में अपेक्षा करता है, महीने संख्या नहीं। – luka8088

+1

@ पास्कल: क्या लुका ने कहा ... http: //php.net/manual/en/function.date.php देखें ... इस मामले में '$ first_minute' एक भ्रमित चर नाम हो सकता है, यह वास्तव में एक टाइमस्टैम्प है महीने के पहले मिनट और 'दिनांक ('टी', $ first_minute) 'टाइमस्टैम्प में महीने के दिनों की संख्या निकालता है। –

3

उपयोग mktime घंटे/माह/दिन से timestamps पैदा करने के लिए/... मूल्यों और cal_days_in_month को एक महीने में दिनों की संख्या प्राप्त:

$month = 1; $year = 2011; 
$firstMinute = mktime(0, 0, 0, $month, 1, $year); 
$days = cal_days_in_month(CAL_GREGORIAN, $month, $year); 
$lastMinute = mktime(23, 59, 0, $month, $days, $year); 
+1

धन्यवाद, लेकिन $ lastMinute = mktime (23, 59, 59, $ माह, $ दिन, $ वर्ष) का उपयोग करने के लिए बेहतर; – Kir

+0

@ कियर अच्छी तरह से, यह आखिरी दूसरा होगा, लेकिन आप सही हैं - इसे अपडेट किया गया। – phihag

13

पीएचपी 5.3 के साथ, आप

कर सकते हैं 210
$oFirst = new DateTime('first day of this month'); 
$oLast = new DateTime('last day of this month'); 
$oLast->setTime(23, 59, 59); 

पीएचपी 5.2 में

नोट: रूप AllThecode बाहर नीचे टिप्पणी में, यह अगले उदाहरण केवल काम करता है ओर इशारा करता है, तो आप $oFirst भाग पहले करते हैं। यदि आप +1 month से new DateTime जोड़ते हैं तो परिणाम महीने के अंतिम दिन (PHP 5.5.9 के रूप में) पर एक अतिरिक्त महीने आगे बढ़ जाएगा।

$oToday = new DateTime(); 
$iTime = mktime(0, 0, 0, $oToday->format('m'), 1, $oToday->format('Y')); 
$oFirst = new DateTime(date('r', $iTime)); 

$oLast = clone $oFirst; 
$oLast->modify('+1 month'); 
$oLast->modify('-1 day'); 
$oLast->setTime(23, 59, 59); 
+1

चेतावनी! मैं लगभग इस से जला दिया।एक महीने के 31 वें महीने में -1 महीने एक ही महीने का पहला, पिछले महीने नहीं देगा! –

+0

@AllTheCode, आपके कोड या टिप्पणी में "-1 महीने" एक टाइपो है? यह ऊपर 5.2 उदाहरण में "+1 महीने" है। – enobrev

+1

क्षमा करें, मैंने मूल उदाहरण का उपयोग नहीं किया है। एक ही मुद्दा +1 महीने के लिए भी है। अगर आज 31 अक्टूबर (जो यह है) है और आप एक महीने जोड़ते हैं, तो आपको 1 दिसंबर को 30 नवंबर को नहीं मिलेगा। –

2

यह "मिनट" भाग के लिए पीएचपी> 5.2 और जरूरत adjustement की आवश्यकता है

$year = ...; // this is your year 
$month = ...; // this is your month 
$month = ($month < 10 ? '0' . $month : $month); 
$start = new DateTime($year . '-' . $month . '-01 00:00:00'); 
$end = $start->modify('+1 month -1 day -1 minute'); //perhaps this need 3 "->modify" 
echo $start->format('U'); 
echo $end->format('U'); 

(परीक्षण नहीं)

रेफरी: http://www.php.net/manual/en/class.datetime.php

3

मैं बेहतर तो

लगता है
$first_minute = mktime(0, 0, 0, date("n"), 1); 
$last_minute = mktime(23, 59, 0, date("n"), date("t")); 

है:

$first_minute = mktime(0, 0, 0, date("n"), 1); 
$last_minute = mktime(23, 59, 0, date("n") + 1, 0); 
+0

यह बेहतर क्यों है? – Kir

+0

यह बेहतर है क्योंकि दिनांक ("टी") अतिरिक्त प्रक्रिया है, यदि आप महीने के साथ 0 के दिन का उपयोग करते हैं तो इसकी आवश्यकता नहीं है। [एक तिथि से कम कॉल()] – Artistan

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