В модели у меня есть такое поле: mydate = models.DateField()
теперь функция графика javascript требует отметки времени unix, такой как "1196550000000", как мне вернуть временную метку unix моего ввода mydate.
Спасибо
В модели у меня есть такое поле: mydate = models.DateField()
теперь функция графика javascript требует отметки времени unix, такой как "1196550000000", как мне вернуть временную метку unix моего ввода mydate.
Спасибо
изменить: пожалуйста, проверьте второй ответ, у него есть гораздо лучшее решение
В коде python вы можете сделать это, чтобы преобразовать дату или дату в Unix Epoch
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 ''
Я знаю, что другой ответ был принят некоторое время назад, но этот вопрос кажется высоким в результатах поиска Google, поэтому я добавлю еще один ответ.
Если вы работаете на уровне шаблона, вы можете использовать параметр U
для фильтра date
, например:
{{ mydate|date:"U" }}
Обратите внимание, что он будет основан на TIMEZONE
в ваших settings.py.
И если вы не в шаблоне, вы все равно можете использовать те же базовые утилиты django. Пример:
from django.utils.dateformat import format
print format(mymodel.mydatefield, 'U')
В views.py
вы можете преобразовать значение mydate
в секундах с эпохи Unix следующим образом:
seconds = time.mktime(mydate.timetuple())
Затем передайте его в словаре, который вы используете в качестве аргумента для render_to_response()
(или того, что вы используете для визуализации вашего представления), и в своем шаблоне вставьте {{seconds}}
в скрытое поле, которое затем вы можете вытащить из DOM, чтобы перейти к вашей функции графика javascript.
Обратите внимание, что a DateField
отображает объект Python datetime.date
, и как таковой, его timetuple
будет иметь свои часы, минуты и секунды для полей, равных 0. Если это недостаточно для вас, вы 't нужно изменить mydate
на DateTimeField, и это будет datetime.datetime
. Вы можете использовать mydate.timetuple()
, если вы это сделаете.
Кроме того, я предполагаю, что вы используете местное время. Если вы используете время UTC, вы хотите calendar.gmtime()
, а не time.mktime()
и mydate.utctimetuple()
, а не mydate.timetuple()
, но utctimetuple()
является только допустимым методом для объектов datetime.datetime
. Подробнее см. datetime
docs (также time
и calendar
).
РЕДАКТИРОВАТЬ: подробные данные, такие как факт, что mktime()
возвращает float, который piquadrat запомнил, и я этого не сделал. Подход с настраиваемым фильтром также является хорошим. Голосование за него.
Другая опция:
import time
from django.utils import timezone
naive_date = timezone.make_naive(mydate, timezone.get_current_timezone())
print int(time.mktime(naive_date.timetuple()))