2016-04-15 5 views
5

मैं इस रूप में की तारीख है - - 20160428000000 (28 अप्रैल 2016) यानी yyyymmdd ...महीने के दिनों को जोड़ने से अधिक महीने php के अंतिम दिन नहीं

मैं की जरूरत है कि अगर कुछ दिन (जैसे 3।) कर रहे हैं इस तिथि को जोड़ा गया है - यह है, लेकिन उन्हें जोड़ने चाहिए नहीं महीने (04) से अधिक - अपेक्षित आउटपुट - 20160430000000 - 30 वीं अप्रैल

इसी तरह, 20160226000000 + 5days लौटना चाहिए 20160229000000 यानी लीप वर्ष फ़रवरी इसका मतलब है, यह करने के लिए कूद नहीं करना चाहिए एक और महीना।

कोई संकेत/विचार?

+0

महीने की तारीख और अंतिम तिथि के बीच अंतराल प्राप्त करें। यदि यह अंतराल जोड़ने के लिए अंतराल से कम है, तो बस महीने के आखिरी दिन लौटें। – mitkosoft

उत्तर

3

एक अन्य विकल्प के लिए इसे बाहर की जाँच करने के DateTime वर्गों का उपयोग करने के होगा:

निश्चित रूप से

पहले इनपुट के माध्यम से अपने वस्तु बनाने के। फिर, महीने ऑब्जेक्ट का समापन दिन सेट करें।

उसके बाद, अतिरिक्त करें, फिर जांच करें कि यह अंतिम दिन से अधिक है या नहीं। यदि हाँ, यह अंत करने के लिए सेट, यदि नहीं, तो इसके अलावा के परिणाम प्राप्त:

$day = 5; // days to be added 
$date = '20160226000000'; // input date 
$dt = DateTime::createFromFormat('YmdHis', $date); // create the input date 
$end = clone $dt; // clone/copy the input 
$end->modify('last day of this month'); // and set it to last day 
$dt->add(DateInterval::createFromDateString("+{$day} days")); // add x days 
// make comparision 
$final_date = ($dt > $end) ? $end->format('YmdHis') : $dt->format('YmdHis'); 
echo $final_date; 
+1

अच्छा और सुरुचिपूर्ण! +1 – mitkosoft

+0

यह भी काम करता है, बहुत बहुत धन्यवाद – jitendrapurohit

+0

मैं 'डेटटाइम इमटेबल' का उपयोग करके कुछ समान सुझाव देने वाला था, लेकिन यह मूल रूप से एक ही तर्क है। +1 :) – Narf

1

यह आप इस तरह की कोशिश कर सकते के लिए:

$given_date = 20160428000000; 
$no_of_day = 3; 

if(date('m',strtotime($given_date)) < date('m',strtotime($given_date ." +".$no_of_day."days"))){ 
    echo "Exceeded to next month <br/>"; 
    echo "Last date of month should be: ".date("t M Y", strtotime($given_date)); 
} 
else { 
    echo "Next date will be after ".$no_of_day." day(s)<br/>"; 
    echo date('d M Y',strtotime($given_date ." +".$no_of_day."days")); 
} 

महीने अगले महीने पर चला जाएगा, तो यह चालू माह की अंतिम तिथि को दिखायेगी। अन्यथा यह विस्तारित दिनों की संख्या के बाद तिथि दिखाएगा।

+0

धन्यवाद, लेकिन क्या यह मुझे अंतिम तिथि देगा - 30 अप्रैल? – jitendrapurohit

+0

@jitendrapurohit! हाँ यह होगा, कोशिश करो। – Yash

+0

हाँ, यह काम करता है! धन्यवाद – jitendrapurohit

0

जोड़ा तारीख आखिरी दिन से अधिक है, नई तारीख के रूप में अंतिम दिन का चयन करेंगे।

<?php 
$date_orig = 20160226000000; 
$add_day = 5; # No. of days to add 

$added_date  = strtotime($date_orig. ' + '.$add_day.' days'); // Add $add_day to $date_orig 
$last_date  = strtotime(date("YmtHis", strtotime($date_orig))); // Last day of $date_orig 
$new_date  = ($added_date > $last_date) ? $last_date : $added_date; // check the added date exceeds the last date 
$new_date_format = date("YmdHis", $new_date); // Format Date 

echo $new_date_format; 
?> 
संबंधित मुद्दे