2009-08-11 9 views
31

एक मॉडल मैं एक ऐसे क्षेत्र है में करने के लिए: mydate = models.DateField()Django Datefield यूनिक्स टाइमस्टैम्प

अब एक जावास्क्रिप्ट ग्राफ समारोह जैसे यूनिक्स टाइमस्टैम्प की आवश्यकता है "1196550000000", मैं कैसे यूनिक्स टाइमस्टैम्प लौट सकते हैं मेरे mydate इनपुट का।

धन्यवाद

+8

1196550000000 एक यूनिक्स टाइमस्टैम्प, जब तक कि हम साल 37,942 या कुछ और के बारे में बात कर रहे हैं नहीं है। – hop

+1

यह एक जावास्क्रिप्ट टाइमस्टैम्प की तरह दिखता है, एमआईएस यूनिक्स युग के बाद से। – 0atman

उत्तर

27

संपादित करें: कृपया दूसरा जवाब की जाँच करें, यह एक बहुत अच्छा समाधान

अजगर कोड में है, तो आप ऐसा कर सकते हैं यूनिक्स काल के लिए एक तिथि या दिनांक परिवर्तित करने के लिए

import time 
epoch = int(time.mktime(mydate.timetuple())*1000) 

यह हालांकि एक Django टेम्पलेट में काम नहीं करता है, तो आप एक कस्टम फ़िल्टर की जरूरत है, उदाहरण के लिए:

import time 

from django import template 

register = template.Library() 

@register.filter 
def epoch(value): 
    try: 
     return int(time.mktime(value.timetuple())*1000) 
    except AttributeError: 
     return '' 
+0

जो मुझे नहीं मिलता है: क्यों तिथि वर्ग की strftime() विधि का उपयोग नहीं करते हैं और समय मॉड्यूल से पूरी तरह से छुटकारा पा रहे हैं? – hop

+0

हॉप: 'strftime() 'एक स्ट्रिंग देता है, जो हमेशा आप नहीं चाहते हैं। – Timmmm

+4

उच्चतम चिह्नित उत्तर देखें, यह सही है! – Pykler

5

अपने views.py में, आप यूनिक्स अवधि के बाद सेकंड के लिए mydate का मूल्य परिवर्तित कर सकते हैं इस प्रकार है:

seconds = time.mktime(mydate.timetuple()) 

तब (शब्दकोश आप render_to_response() लिए एक तर्क के रूप में उपयोग में इसे पारित या जो भी आप अपना दृश्य प्रस्तुत करने के लिए उपयोग कर रहे हैं), और अपने टेम्पलेट में, {{seconds}} को एक छिपे हुए फ़ील्ड में चिपकाएं, जिसे आप अपने जावास्क्रिप्ट ग्राफ़ फ़ंक्शन को पास करने के लिए DOM से बाहर खींच सकते हैं।

ध्यान दें कि अजगर वस्तु datetime.date करने के लिए एक DateField नक्शे, और जैसे, अपने timetuple इसकी घंटे, मिनट और सेकंड 0 पर सेट क्षेत्रों है कि आप के लिए पर्याप्त सुक्ष्म नहीं है होगा, आप को बदलना होगा mydate डेटटाइमफ़िल्ल्ड पर और यह datetime.datetime होगा। यदि आप ऐसा करते हैं तो भी आप mydate.timetuple() का उपयोग कर सकते हैं।

इसके अलावा, मुझे लगता है कि आप स्थानीय समय का उपयोग कर रहे हैं। यदि आप यूटीसी समय का उपयोग कर रहे हैं, तो आप time.mktime() और mydate.utctimetuple() के बजाय mydate.timetuple() के बजाय calendar.gmtime() चाहते हैं, लेकिन utctimetuple()datetime.datetime ऑब्जेक्ट्स के लिए केवल एक वैध विधि है। अधिक स्पष्ट विवरण के लिए datetime दस्तावेज़ (time और calendar) देखें।

संपादित करें: mktime() इस तथ्य के बारे में जानकारी जैसे कि mktime() एक फ्लोट लौटाता है, जिसे पिक्चरर याद किया गया था और मैंने नहीं किया। कस्टम-फ़िल्टर दृष्टिकोण भी एक अच्छा है। उस पर मतदान करना।

94

मैं जानता हूँ कि एक और उत्तर कुछ समय पहले स्वीकार कर लिया गया, लेकिन यह प्रश्न Google के खोज परिणामों पर अधिक दिखाई देता है, इसलिए मैं एक और जवाब जोड़ूंगा।

आप टेम्पलेट स्तर पर काम कर रहे हैं, तो आप U parameterdate फिल्टर, उदा .:

{{ mydate|date:"U" }} 

ध्यान रखें कि आपके settings.py में TIMEZONE पर आधारित होगा करने के लिए उपयोग कर सकते हैं।

+0

चूंकि यह समाधान कोई वोट नहीं है, इसलिए मैंने सोचा कि मैं उल्लेख करता हूं कि यह बिना किसी मुद्दे के मेरे लिए काम करता है। धन्यवाद। – michaelavila

+1

मुझे इसे काम करने में समस्याएं आ रही हैं। मैं किसी भी अन्य झंडे * का उपयोग करके आउटपुट करने के लिए दिनांक और समय प्राप्त कर सकता हूं, लेकिन जब मैं "यू" ध्वज का उपयोग करने का प्रयास करता हूं तो मुझे खाली स्ट्रिंग मिलती है। मैं boggled हूँ। –

+2

+1, यह वही है जो मुझे चाहिए था। – Exelian

61

और यदि आप टेम्पलेट परत में नहीं हैं, तो भी आप उसी अंतर्निहित django utils का उपयोग कर सकते हैं।उदाहरण के लिए:

from django.utils.dateformat import format 
print format(mymodel.mydatefield, 'U') 
+2

संदर्भ के लिए: https://github.com/django/django/blob/master/django/utils/dateformat.py – Paolo

+2

उपरोक्त उत्तर पढ़ने के बाद मैं बिल्कुल इसके लिए देख रहा था। –

1

एक अन्य विकल्प:

import time 
from django.utils import timezone 

naive_date = timezone.make_naive(mydate, timezone.get_current_timezone()) 
print int(time.mktime(naive_date.timetuple()))