2010-09-04 13 views
13

जैसे मैं उत्पादन करने के लिए एक अजगर datetime वस्तु चाहते हैं (और Django में परिणाम का उपयोग करें) की तरह इस:अजगर प्रारूप datetime PHP के "एस"

Thu the 2nd at 4:30 

लेकिन मैं जैसे मैं S स्ट्रिंग (क्या वे कहते हैं "अंग्रेजी क्रमसंख्या प्रत्यय") के साथ पीएचपी datetime स्वरूप के साथ कर सकते हैं उत्पादन st, nd, rd, या th को अजगर में कोई रास्ता खोजने (http://uk.php.net/manual/en/function.date.php) ।

वहाँ एक अंतर्निहित तरीका Django/अजगर में यह करने के लिए है?strftime पर्याप्त नहीं है (http://docs.python.org/library/datetime.html#strftime-strptime-behavior)।

Django जो करता है जो मैं चाहता फ़िल्टर है, लेकिन मैं एक समारोह, नहीं एक फिल्टर, चाहते हैं कि मैं क्या करना चाहते हैं। या तो एक django या पायथन समारोह ठीक हो जाएगा।

+0

यदि आपको तैयार किए गए समाधान नहीं मिलते हैं, तो यहां कुछ अच्छे लोग हैं जिन्हें आप परिवर्तित कर सकते हैं: http://stackoverflow.com/questions/165713/how-do-i-provide-a -suffix के लिए दिन के- महीने – paxdiablo

उत्तर

23

django.utils.dateformat एक समारोह format कि दो तर्क लेता है, पहले एक तारीख जा रहा है (एक datetime.date [[या datetime.datetime]] उदाहरण है, जहां datetime पायथन के मानक पुस्तकालय में मॉड्यूल है), दूसरा एक प्रारूप स्ट्रिंग किया जा रहा है , और परिणामी स्वरूपित स्ट्रिंग देता है। अपरकेस- S प्रारूप वस्तु (निश्चित रूप से प्रारूप स्ट्रिंग का हिस्सा) वह है जो 'सेंट', 'एन', 'rd' या 'th' के उचित में से एक है, दिन के आधार पर, प्रश्न में तारीख का महीना।

11

पता के बारे में में बनाया गया है, लेकिन मैं यह प्रयोग किया जाता है न ...

def ord(n): 
    return str(n)+("th" if 4<=n%100<=20 else {1:"st",2:"nd",3:"rd"}.get(n%10, "th")) 

और:

def dtStylish(dt,f): 
    return dt.strftime(f).replace("{th}", ord(dt.day)) 
+0

'' वें 'का बिंदु क्या है यदि 4 <= n% 100 <= 20'? अन्य भाग सभी मामलों को कवर करेगा। – Arijoon

+4

@ एरिजून उस भाग में 'किशोर शामिल हैं, जो अन्य सभी नियमों का पालन नहीं करते हैं। यदि आप इसे हटा देते हैं, तो आपको '11 वें 'या' 13 वें' मिलेगा जब वे '11 वें 'और' 13 वें' होना चाहिए। – Status

-1

यहाँ अधिक सजावटी कोड है:

def date_extention(number): 
    if number%10 == 1: 
     return '%dst' % number 
    if number%10 == 2: 
     return '%dnd' % number 
    if number%10 == 3: 
     return '%drd' % number 
    if (number%10 >= 4) or (number%10== 0): 
     return '%dth' % number 

वैसे यह काम करता है किसी भी संख्या के साथ, इसलिए मैं आपको एक मॉड्यूल बनाने की सलाह देता हूं। आप

उपयोगकर्ता inputed कार्यक्रमों का एक बहुत ...

+2

"यह किसी भी संख्या के साथ काम करता है" जब तक कि आप 11 वीं, 12 वीं और 13 वीं तक नहीं पहुंच जाते। – Holloway

3

आप बस मानवीयकरण पुस्तकालय

from django.contrib.humanize.templatetags.humanize import ordinal

फिर आप सिर्फ क्रमसूचक किसी भी पूर्णांक दे सकते हैं का उपयोग करके ऐसा कर सकते हैं, यानी बनाने खास तौर पर अगर ordinal(2)2nd

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