2017-07-24 15 views
11

मैं एक तिथि में 2 सप्ताह के दिन जोड़ने की कोशिश कर रहा हूं, लेकिन मैं एक सरणी में दिनों को बाहर करना चाहता हूं।छुट्टियों की तारीखों को छोड़कर दिनांक प्रविष्टि में दो व्यावसायिक दिन जोड़ें

तिथियों की सरणी बाहर करने के लिए:

$bankHolidays = array(); 
foreach($obj as $e) { 
    if($e->division == 'england-and-wales') { 
     foreach($e->events as $events) { 
      $bankHolidays[] = $events->date; 
     } 
    } 
} 

2 जोड़ना कार्य दिवसों तिथि करने के लिए

$ret = date('d-m-Y', strtotime($bill["charge_customer_at"]. ' +2 weekdays')); 

मैं तारीखों की सरणी कैसे शामिल कर सकता बाहर करने के लिए?

उदाहरण के तौर पर, यदि मेरी तिथि 2017-07-19 थी और मैं 2 सप्ताह के दिनों को जोड़ना चाहता हूं, तो 2017-07-21 आउटपुट होगा।

लेकिन अगर 2017-07-21 मेरी सरणी में था, तो इसे इस तारीख को छोड़ना चाहिए और 2 सप्ताह के दिनों को जोड़ना जारी रखना चाहिए ताकि आउटपुट सप्ताहांत की वजह से 2017-07-24 हो जाये।

+1

मैं अपने प्रश्न के माध्यम से दो बार पढ़ा है

return nextBusinessDay(date('Y-m-d',strtotime($date.' +1 day')), $daysToSkip,$holidays); 

बदल सकते हैं और अपने वांछित उत्पादन समझ में नहीं आता। मुझे यकीन है कि अगर आप अपने वांछित आउटपुट का उदाहरण देते हैं तो मैं यह कर सकता हूं। –

+0

मेरे अपडेट की जांच करें, मैंने एक उदाहरण दिया है। मुझे आशा है कि यह समझ में आता है – charlie

+0

क्या आपकी स्क्रिप्ट तिथि + 2 दिन लौटाती है। "छुट्टियों की जांच करें" करें, देखें कि क्या आपकी नई तिथि आपकी छुट्टियों की सरणी में मौजूद है या नहीं। यदि ऐसा होता है, तो इसमें एक दिन जोड़ें। फिर आपको इसे सप्ताहांत में सत्यापित करने की आवश्यकता है। यदि उत्पन्न दिन शनिवार या रविवार है, तो तिथि में 1 दिन जोड़ें, और पूरी चीज को फिर से शुरू करें (छुट्टियों की जांच से शुरू)। लगता है जैसे आपके पास सिद्धांत में पहले से ही है? बस 'in_array()' विधि का उपयोग करें। –

उत्तर

12

आप while लूप का उपयोग करने के रूप में सरल कुछ कर सकते हैं।

$date = '2017-07-25'; 
$reserved = ['2017-07-27', '2017-07-28']; 
$days = 2; 

while ($days > 0) { 
    $date = date('Y-m-d', strtotime($date . ' +1 weekday')); 
    if (! in_array($date, $reserved)) $days--; 
} 

var_dump($date); 
+1

यह समाधान '+1 दिन' जोड़ रहा है जब ओपी सप्ताहांत – BeetleJuice

+0

अच्छी जगह जोड़ना चाहता है। फिक्स्ड। – fubar

+0

वाह। मैंने ऐसा कभी नहीं सोचा होगा। बस इसके अपर्याप्तता के लिए +1, कभी भी ध्यान न दें कि आप इसके साथ कितनी तेजी से आए। –

2

के साथ एक दिया भरपाई अगले कार्य दिवस समारोह का पता लगाएं।

निम्नलिखित मूल रूप से आपकी दी गई तिथि, आपके मामले में 2 दिनों की संख्या, और छुट्टियों की सरणी जो आप अपने प्रश्न में दिखाते हैं, को पूर्ववत करते हैं। यदि आपकी तिथि के बाद बहुत से सप्ताहांत छुट्टी है तो यह एक दिन जोड़ता है और फिर से जांचता है।

function nextBusinessDay($date, $daysToSkip,$holidays){ 
    $day = date('Y-m-d',strtotime($date. ' + '.$daysToSkip.' weekday')); 
    if(!in_array($day,$holidays)){ 
     return $day; 
    } else { 
     return nextBusinessDay(date('Y-m-d',strtotime($date.' +1 day')), $daysToSkip,$holidays); 
    } 
} 

$date = '2017-07-19'; 
$holidays = ['2017-07-21']; 
echo nextBusinessDay($date,2,$holidays);//returns 2017-07-24 

$date = '2017-07-19'; 
$holidays = ['2017-07-21', '2017-07-24']; 
echo nextBusinessDay($date,2,$holidays);//returns 2017-07-25 like if it were a 4 day weekend 

क्षमा करें मुझे इसे देखने और कुछ पोस्ट करने का मौका पाने में मुझे कुछ समय लगा। यह आपके लिए काम करना चाहिए। मेरी समझ यह है कि आपको किसी दिए गए दिनांक से दो दिन की पहली व्यावसायिक तारीख वापस करने की आवश्यकता है, जब तक कि आपकी छुट्टियों की सरणी में तिथि न हो, दो सप्ताह तक नहीं रहें। क्या तुम सच में 2 दिन, या फिर भी कई दिनों जोड़ने रखने के लिए चाहते हैं, तो करने के लिए

return nextBusinessDay(date('Y-m-d',strtotime($date.' +'.$daysToSkip.' day')), $daysToSkip,$holidays); 
+0

इसे एक साथ रखने के लिए धन्यवाद - ऐसा लगता है कि यह सही तिथियां लौटाता है लेकिन मैं वास्तव में इसे किसी अन्य फ़ंक्शन के अंदर चला रहा हूं और मुझे लगता है कि इससे 2 कार्यों के अंदर मूल्यों को वापस करने में समस्या आती है - क्या इससे कोई समस्या हो सकती है? – charlie

+0

आपका दूसरा फ़ंक्शन क्या है? वापसी का मतलब यह है कि फ़ंक्शन का मूल्य रिटर्न में जो कुछ भी है। आप जितना चाहें उतने कार्यों को घोंसला कर सकते हैं। मुझे दिखाएं कि आपके पास क्या है और मैं आपको दिखा सकता हूं कि इसे कैसे काम करना है। –

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