37

在模型中,我有一个这样的字段: mydate = models.DateField()

现在一个javascript图形函数需要unix时间戳,例如“1196550000000”,我怎样才能返回我的mydate输入的unix时间戳。

谢谢

4

6 回答 6

108

我知道不久前接受了另一个答案,但是这个问题在 Google 的搜索结果中出现的很高,所以我将添加另一个答案。

如果您在模板级别工作,则可以使用过滤器的U参数date例如:

{{ mydate|date:"U" }}

请注意,它将基于TIMEZONE您的 settings.py 中的。

于 2010-07-31T01:44:11.830 回答
70

如果你不在模板层,你仍然可以使用相同的底层 django utils。前任:

from django.utils.dateformat import format
print format(mymodel.mydatefield, 'U')
于 2011-09-12T11:17:02.700 回答
28

编辑:请检查第二个答案,它有一个更好的解决方案

在 python 代码中,您可以执行此操作以将日期或日期时间转换为 Unix 纪元

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 ''
于 2009-08-11T09:45:05.083 回答
6

在您的views.py中,您可以将 的值转换为mydate自 Unix 纪元以来的秒数,如下所示:

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

然后将它传递到您用作参数的字典中render_to_response()(或您用来呈现视图的任何内容),并在您的模板中,{{seconds}}插入一个隐藏字段,然后您可以将其拉出 DOM 以传递给您的 javascript图形功能。

请注意,aDateField映射到 Python 对象datetime.date,因此,它timetuple的小时、分钟和秒字段将设置为 0。如果这对您来说不够细粒度,您需要更改mydate为 DateTimeField,它会成为一个datetime.datetimemydate.timetuple()如果你这样做,你仍然可以使用。

另外,我假设您使用的是当地时间。如果您使用 UTC 时间,则需要calendar.gmtime()而不是time.mktime()mydate.utctimetuple()而不是mydate.timetuple(),但这utctimetuple()只是datetime.datetime对象的有效方法。有关更多详细信息,请参阅datetime文档(也time和)。calendar

编辑:繁琐的细节,例如mktime()返回浮点数的事实,piquadrat 记得而我没有。自定义过滤器方法也是一种很好的方法。投票赞成。

于 2009-08-11T09:35:22.047 回答
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()))
于 2016-10-17T22:07:32.943 回答
0

我在答案中没有找到的一种非常简单的方法

import time
timestamp = int(time.time())
于 2020-06-06T11:42:04.617 回答