django Datefield到Unix的时间戳

33 python django unix-timestamp

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

现在一个javascript图形函数需要unix时间戳,例如"1196550000000",如何返回我的mydate输入的unix时间戳.

谢谢

Joh*_*ett 102

我知道不久之前已经接受了另一个答案,但这个问题在Google的搜索结果中显得很高,所以我将添加另一个答案.

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

{{ mydate|date:"U" }}
Run Code Online (Sandbox Code Playgroud)

请注意,它将基于TIMEZONEsettings.py中的内容.


Mik*_*gel 66

如果您不在模板层中,您仍然可以使用相同的底层django工具.例如:

from django.utils.dateformat import format
print format(mymodel.mydatefield, 'U')
Run Code Online (Sandbox Code Playgroud)

  • 供参考:https://github.com/django/django/blob/master/django/utils/dateformat.py (2认同)
  • 看完上面的答案后,我正准备这样做. (2认同)

Ben*_*end 27

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

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

import time
epoch = int(time.mktime(mydate.timetuple())*1000)
Run Code Online (Sandbox Code Playgroud)

这在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 ''
Run Code Online (Sandbox Code Playgroud)

  • 看到最高标记的答案,它是正确的答案! (4认同)

Mer*_*son 6

在你的views.py,你可以将mydate自Unix时代以来的值转换为秒,如下所示:

seconds = time.mktime(mydate.timetuple())
Run Code Online (Sandbox Code Playgroud)

然后将它传递给你用作参数的字典render_to_response()(或者你用来渲染你的视图的任何东西),并在你的模板中,{{seconds}}插入一个隐藏的字段,然后你可以从DOM中取出来传递给你的javascript图功能.

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

另外,我假设你正在使用当地时间.如果您使用UTC时间,你想calendar.gmtime(),而不是time.mktime()mydate.utctimetuple(),而不是mydate.timetuple(),但utctimetuple()仅仅是一个有效的方法datetime.datetime的对象.有关更多细节,请参阅datetime文档(也timecalendar).

编辑:fiddly详细信息,例如mktime()返回浮动的事实,piquadrat记得,而我没有.自定义过滤器方法也很好.投一票.