モデルには次のようなフィールドがあります:mydate = models.DateField()
現在、JavaScriptグラフ関数には "1196550000000"などのUNIXタイムスタンプが必要ですが、mydate入力のUNIXタイムスタンプを返すにはどうすればよいですか。
ありがとう
編集:2番目の回答を確認してください。はるかに優れた解決策があります
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 ''
しばらく前に別の回答が受け入れられたことは知っていますが、この質問はGoogleの検索結果の上位に表示されるため、別の回答を追加します。
テンプレートレベルで作業している場合は、 U
parameter をdate
フィルターに使用できます。例:
{{ mydate|date:"U" }}
これは、settings.pyのTIMEZONE
に基づいていることに注意してください。
また、テンプレートレイヤーにいない場合でも、同じ基礎となるDjango utilsを使用できます。例:
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グラフ関数に渡します。
DateField
はPythonオブジェクト_datetime.date
_にマップするため、そのtimetuple
には時間、分、秒のフィールドが設定されます。それが十分にきめ細かくない場合は、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()))