2012-01-03 9 views
6

के भीतर है, मैं इसके लिए हमेशा के लिए देख रहा हूं, लेकिन उत्तर कहीं नहीं लगता है। यहां समस्या है:PHP, देखें कि दिनांक सीमा आंशिक रूप से किसी अन्य दिनांक सीमा

कहें, मेरे पास दो दिनांक सीमाएं हैं।

$daterange1 = 2012-04-20 till 2012-04-28 
$daterange2 = 2012-04-18 till 2012-05-01 

अब, मैं जानना चाहता हूं कि daterange2 daterange1 के भीतर है या नहीं। लेकिन, जैसा कि आप देख सकते हैं, daterange2 केवल आंशिक रूप से daterange1 के भीतर है। वहाँ हो रही 3 चर वापस, की तरह कुछ का कोई तरीका है: तक

  1. 2012-04-18 2012-04-20
  2. 2012-04-20 तक 2012-04-28
  3. 2012-04 -28 तक 2012-05-01

मुझे पता है कि यह थोड़ा अस्पष्ट लगता है, लेकिन मुझे वास्तव में यह नहीं पता कि इसे अलग कैसे समझाया जाए।

+3

मैं सवाल समझता हूं, आप हर समय 'strtotime()' फ़ंक्शन के साथ कनवर्ट करना और तुलना करना शुरू कर सकते हैं। हो सकता है कि एक 'डेटटाइम' ऑब्जेक्ट आपको यहां भी मदद करेगी। –

+0

क्या आपको यह जानने की ज़रूरत है कि सीमा भीतर है और तीसरा चर है –

उत्तर

5

अच्छा, तार्किक रूप से आप किसी सीमा के लिए आंशिक रूप से किसी सीमा के लिए आवश्यकताओं को तोड़ सकते हैं।

एक सीमा एक और सीमा के भीतर केवल आंशिक रूप से है अगर:

  • सीमा 1 की आरंभ तिथि है> सीमा 2 की आरंभ तिथि से नहीं बल्कि> से सीमा 2 की समाप्ति तिथि
  • सीमा 1 की समाप्ति तिथि सीमा 2 की समाप्ति तिथि से < है, लेकिन नहीं < रेंज 2 की आरंभ तिथि

यदि इनमें से दोनों या दोनों सत्य हैं तो श्रेणियां एक दूसरे के भीतर हैं।

7

यहां PHP का DateTime कक्षा का उपयोग करके एक उदाहरण दिया गया है। ध्यान दें कि यदि आप DateTime::__construct() पर अमान्य दिनांक स्ट्रिंग पास करते हैं तो फ़ंक्शन एक अपवाद फेंक देगा, इसलिए यदि आप इसके बारे में चिंतित हैं तो आपको एक प्रयास/पकड़ ब्लॉक लागू करना चाहिए। इसके अलावा, मैं PHP के min और max फ़ंक्शंस का उपयोग करता हूं ताकि इससे कोई फ़र्क नहीं पड़ता कि दिनांक किस दिनांक निर्दिष्ट हैं।

$daterange1 = array('2012-04-20', '2012-04-28'); 
$daterange2 = array('2012-04-18', '2012-05-01'); 

$range_min = new DateTime(min($daterange1)); 
$range_max = new DateTime(max($daterange1)); 

$start = new DateTime(min($daterange2)); 
$end = new DateTime(max($daterange2)); 

if ($start >= $range_min && $end <= $range_max) { 
    echo 'woot!'; 
} else { 
    echo 'doh!'; 
} 
0

हालांकि यह एक बहुत पुरानी पोस्ट है। लेकिन फिर भी अगर कोई अटक गया। ओवरलैपिंग तिथियों के लिए यहां पूरा उदाहरण दिया गया है।

<?php 
$daterange1 = array('2017-09-24', '2017-09-28'); 
$daterange2 = array('2017-09-22', '2017-09-25'); 

$range_min = new DateTime(min($daterange1)); 
$range_max = new DateTime(max($daterange1)); 

$start = new DateTime(min($daterange2)); 
$end = new DateTime(max($daterange2)); 

if ($start >= $range_min && $end <= $range_max) { 
echo 'Overlapping!'; 
} 
else if($end > $range_min && $start < $range_max){ 
echo "partialy"; 
} 
else { 
echo 'free!'; 
} 
?>