2013-11-04 5 views
6

यदि मैं उस पंक्ति से जुड़ी तारीख 30 दिन से कम पुरानी है, तो मैं तालिका में एक पंक्ति को ध्वजांकित करने के लिए टहन कर रहा हूं।यदि दिनांक X दिनों के भीतर है तो तुलना करने के लिए कैसे करें?

टहनी के दस्तावेज़ कहा गया है कि दो तारीख वस्तुओं की तुलना करने के लिए, आप पहली तारीख को वस्तु कनवर्ट करते हैं, और फिर एक तुलना इस तरह से करना है:

{% if date(yourDate) < date(-'30days') %} ... {% endif %}

हालांकि, यह कैसे करने के लिए निर्दिष्ट नहीं करता तुलना के बाईं तरफ के दिनांक प्रारूप को पास करें, मैं समझता हूं कि ट्विग का दिनांक फ़ंक्शन PHP की तारीख के लिए एक प्रकार का रैपर है।

PHP में मैं आमतौर पर कहेंगे:

$myDate = \DateTime::createFromFormat("m/d/Y", $myDate);

लेकिन टहनी में जाहिरा तौर पर वहाँ है ताकि इसे किसी अन्य स्वरूप में परिवर्तित करने के लिए मूल तारीख के प्रारूप निर्दिष्ट करने के लिए कोई रास्ता नहीं है, या कम से कम यह दस्तावेज में नहीं है ।

{% if date(d.LastDate) > date('-30days') %}...{% endif %}

{% if d.LastDate | format("Y-m-d") > date('-30days') %}...{% endif %}

{% if date("m/d/Y", d.LastEmailSentDate) > date('-30days') %}...{% endif %}

उन की स्थिति और उनके विविधताओं Symfony2 में निम्न अपवाद वापसी:

An exception has been thrown during the rendering of a template 
("DateTimeZone::__construct(): Unknown or bad timezone (---)") 

यह मैं क्या कोशिश की है हैमेरा नियंत्रक प्रारूप में दिनांक लौटा रहा है: m/d/Y और यदि वह तिथि 30 दिन से कम पुरानी है तो मैं उस पंक्ति को ध्वजांकित करना चाहता हूं।

+1

आप अपनी इकाई में 'getIsDateLessThan31DaysOld()' नामक एक फ़ंक्शन जोड़ सकते हैं, और इसे गलत के बारे में सच कर सकते हैं। फिर इस फ़ंक्शन को Twig में कॉल करें: '{% यदि d.isDateLessThan31DaysOld%} ... {% endif%}'। ट्विग कोड की तुलना में PHP कोड लिखना आसान होना चाहिए। –

+3

यह टेम्पलेट्स से संबंधित नहीं होना चाहिए। उचित मॉडल के साथ अपने मॉडल [ओं] प्रदान करें। – moonwave99

उत्तर

17

यूनिक्स काल के बाद से सेकंड की संख्या में हो रही (PHP दिनांक स्वरूप U)

{% if d.LastDate|date("U") > "-30 days"|date("U") %} 
    <p>Less than 30 days old</p> 
{% endif %} 
13

Twig 1.6 तिथि तुलना का समर्थन करता है के द्वारा दो तिथियों की तुलना करें।

{% if date(d.LastDate) > date("-30 days") %} 
    <p>Less than 30 days old</p> 
{% endif %} 

{% if date(d.LastDate) > date("now") %} 
    <p>Future date</p> 
{% endif %} 

http://twig.sensiolabs.org/doc/functions/date.html

3

पीएचपी 5.3 के बाद से अधिक सटीकता के साथ एक तरीका है।

{# endDate and startDate are strings or DateTime objects #} 
{% set difference = date(endDate).diff(date(startDate)) %} 
{% set leftDays = difference.days %} 
{% if leftDays > 30 %} 
    Less than 30 days old 
{% else %} 
    More than 30 days old 
{% endif %} 

स्पष्टीकरण:

पीएचपी 5.3 DateTime वस्तु diff() तरीका है जिसके endDate और beginDate के बीच परिणाम अंतर टहनी

के साथ एक DateInterval ऑब्जेक्ट प्रदान

टहनी date समारोह हमेशा एक DateTime वस्तु लौट गया है तो हम कर सकते कॉल diff विधि

अंत में हम DateInterval ऑब्जेक्ट के गुणों तक पहुंच सकते हैं या इसे ट्वग डेट फ़िल्टर के साथ प्रारूपित कर सकते हैं।

नोट: यदि चर पहले से ही डेटटाइम ऑब्जेक्ट है तो दिनांक फ़ंक्शन के साथ अंतराल या प्रारंभ दिनांक की आवश्यकता नहीं है।

नोट 2: DateTime का उपयोग DateTimeInterface के पर्याय के रूप में किया जाता है।

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