मैं एक तिथि में 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 हो जाए।

10
charlie 25 जुलाई 2017, 01:26

2 जवाब

सबसे बढ़िया उत्तर

आप 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);
11
fubar 25 जुलाई 2017, 02:32

किसी दिए गए ऑफ़सेट के साथ अगला कार्यदिवस फ़ंक्शन ढूंढें।

निम्नलिखित मूल रूप से आपकी दी गई तिथि, आपके द्वारा छोड़े जाने वाले दिनों की संख्या, आपके मामले 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.' +1 day')), $daysToSkip,$holidays);

प्रति

return nextBusinessDay(date('Y-m-d',strtotime($date.' +'.$daysToSkip.' day')), $daysToSkip,$holidays);
2
Altimus Prime 26 जुलाई 2017, 06:40