2013-04-10 4 views
5

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

{<f:format.date format="d.m.Y">+2 days</f:format.date>} 
{<f:format.date format="d.m.Y">{day.valid}</f:format.date>} 

मैं मॉडल या नियंत्रक में नहीं टेम्प्लेट में हल करने के लिए, चाहते हैं:

यहाँ मेरी दो चर रहे हैं।

उत्तर

9
<f:if condition="{f:format.date(date: '+2 days' format: 'Y-m-d')} < {f:format.date(date: yourdate, format: 'Y-m-d')}"> 
<f:then> 
    yourdate is smaller than now + 2 days. 
</f:then> 
<f:else> 
    yourdate is greater than now + 2 days. 
</f:else> 
</f:if> 
+0

है '' को बंद नहीं किया जा सकता है और न ही कॉपी किया जा सकता है, यहां तक ​​कि यह भी है। –

+0

इसे कुछ सफेद जगह की आवश्यकता थी – Urs

1

दिनांक को format="U" का उपयोग करके एक यूनिक्स टाइमस्टैम्प में कनवर्ट करें और उनकी तुलना करें। आपको एक वेरिएबल जोड़ने की आवश्यकता है जिसमें तुलनात्मक तिथि हो।

<f:if condition="{f:format.date(date: day.valid, format: 'U')} > {f:format.date(date: date_compare, format: 'U')}"> 
    Date is valid 
</f:if> 
+0

जो पारित किया गया है उसके आधार पर, यह आपको तिथियों से अधिक दे सकता है, क्योंकि टाइमस्टैम्प में मिनट भी होंगे। – Urs

+0

... इसलिए यदि आपको पता होना चाहिए कि क्या आप अगले दिन हैं, तो वाई-एम-डी अधिक पर्याप्त – Urs

1

यहाँ मेरे वर्तमान समाधान है जो एक आज की तारीख में कहते हैं और सामग्री से तारीख के साथ कुछ गणना करता है।

नियंत्रक में, डेटा के लिए आज की तारीख जोड़ें:

$this->view->assign('date_now', new \DateTime());

यह द्रव में {} date_now तो के रूप में उपलब्ध है: कैसे सही पक्ष पर

<f:if condition="{f:format.date(date: date_now, format: '(Y-m-d)')} > {f:format.date(date: '{event.date}-4 weeks', format: '(Y-m-d)')}"> 
    <f:then> 
     <p>Event date is past</p> 
    </f:then> 
    <f:else> 
     <p>Event date is upcoming</p> 
    </f:else> 
</f:if> 

ध्यान दें, जहां कुछ गणना की जाती है, अतिरिक्त उद्धरण और घुंघराले ब्रैकेट आते हैं ('{event.date}-4 weeks')।

पीएस मैं प्रारूप को U पर दिनांक तुलना के लिए पसंद करता हूं, क्योंकि हम वर्तमान समय की तुलना नहीं करना चाहते हैं - बस तिथि।

0

असल में: क्योंकि डेटटाइम में getTimestamp विधि (http://php.net/manual/en/datetime.gettimestamp.php, 5.3.0 से) है जो पूरी तरह से फ़्लूइड में समर्थित गेटर विधि नामकरण के अनुरूप है, निम्नलिखित पूरी तरह से संभव है। यह देखते हुए $ DATE1 और $ DATE2 दोनों दिनांक समय टेम्पलेट करने के लिए सौंपा उदाहरण हैं:

<f:if condition="{date1.timestamp} < {date2.timestamp}">...</f:if> 

दिनांक फ़ॉर्मेट करने के लिए आवश्यकता के बिना के रूप में यूनिक्स टाइमस्टैम्प पूर्णांकों दो तिथियों की तुलना करेंगे। तो अपने मामले के लिए, अपने नियंत्रक कार्रवाई से $date = (new \DateTime('now'))->modify('+2 days'); असाइन करें और फ्लूइड में इसकी तुलना करें। या बस time() टाइमस्टैम्प असाइन करें और डेटटाइम उपयोग को छोड़कर सीधे उस से तुलना करें।

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