2013-03-27 8 views
15

मुझे एक प्रारंभिक तिथि और समाप्ति तिथि के साथ एक इकाई मिली है।ट्विग तिथि अंतर

क्या टवीग का उपयोग करके उनके बीच समय में अंतर प्राप्त करना संभव है?

उत्तर

12

ऐसा करने के लिए कोई अंतर्निहित कार्य नहीं है, लेकिन आप आसानी से इसे स्वयं कर सकते हैं, extending twig आसान है!

quick'n'easy रास्ता टहनी के सरल समारोह वर्ग के साथ यह करने के लिए है:

$function = new Twig_SimpleFunction('date_difference', function ($start, $end) { 
    // ... calculate difference and return it 
}); 

// assuming $twig is an instance of Twig_Environment 
$twig->addFunction($function); 

पुन: प्रयोज्य तरह से एक टहनी विस्तार (एक ही लिंक पर प्रलेखित) तैयार करना है। यह अभी भी आसान है।

50

PHP 5.3 के बाद से एक एक्सटेंशन लिखने के बिना एक और विकल्प है।

यह उदाहरण बहुवचन दिन/दिन

calc करने के लिए कैसे दिखाने
{# endDate and startDate are strings or DateTime objects #} 
{% set difference = date(endDate).diff(date(startDate)) %} 
{% set leftDays = difference.days %} 
{% if leftDays == 1 %} 
    1 day 
{% else %} 
    {{ leftDays }} days 
{% endif %} 

स्पष्टीकरण:

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

ट्विग date फ़ंक्शन हमेशालौटाता हैवस्तु तो हम diff विधि कॉल

अंत में हम DateInterval ऑब्जेक्ट के गुणों का उपयोग करने या टहनी date फिल्टर के साथ यह फ़ॉर्मेट कर सकते हैं कर सकते हैं।

नोट: वहाँ चादर endDate या startDatedate समारोह के साथ की कोई जरूरत नहीं है, तो पहले से ही एक चर DateTime वस्तु है।

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

+3

यह एक सपने की तरह काम करता है, फिर भी यदि दिनांक के बीच का अंतर एक महीने से अधिक होने जा रहा है, .D के बजाय उपयोग .days, केवल .d दिन का हिस्सा लौटाता है, यानी यदि अंतर 1 महीने, 1 दिन है, तो डी 1 होगा, लेकिन दिन 32 होगा (31 दिन का दिन मानते हुए)। '{% सेट leftDays = difference.days%}' –

+0

जन्मदिन {{date()। Diff (दिनांक (item.birth)) प्राप्त करने के लिए। Y}} – dikirill

+0

लेकिन दोनों की आरंभ तिथि और समाप्ति तिथि दोनों की स्थिति होगी एक दिन में। आप कैसे निर्धारित करते हैं कि यह एक दिन शेष है (+1), या एक दिन से अधिक (-1) ??? – Pathros

2

यह भी ध्यान दें कि सेंसियो लैब्स से मौजूदा Date extension है जो टाइम_डिफ फ़िल्टर प्रदान करता है।

तो फिर तुम इसे इस तरह उपयोग कर सकते हैं: {{ entity.ending_date|time_diff(entity.starting_date) }}