モデルには、次のようなフィールドがあります: mydate = models.DateField()
現在、javascript グラフ関数は「1196550000000」などの UNIX タイムスタンプを必要としています。mydate 入力の UNIX タイムスタンプを返すにはどうすればよいですか。
ありがとう
モデルには、次のようなフィールドがあります: mydate = models.DateField()
現在、javascript グラフ関数は「1196550000000」などの UNIX タイムスタンプを必要としています。mydate 入力の UNIX タイムスタンプを返すにはどうすればよいですか。
ありがとう
少し前に別の回答が受け入れられたことは知っていますが、この質問は Google の検索結果で上位に表示されるため、別の回答を追加します。
テンプレート レベルで作業している場合は、次のようにU
パラメーターをdate
フィルターに使用できます。
{{ mydate|date:"U" }}
TIMEZONE
settings.py の に基づいていることに注意してください。
また、テンプレート層にいない場合でも、同じ基礎となる django ユーティリティを使用できます。元:
from django.utils.dateformat import format
print format(mymodel.mydatefield, 'U')
編集: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 ''
では、次のように の値を Unix エポックからの秒数views.py
に変換できます。mydate
seconds = time.mktime(mydate.timetuple())
次に、引数として使用する辞書render_to_response()
(またはビューをレンダリングするために使用しているもの)にそれを渡し、テンプレートで{{seconds}}
隠しフィールドに貼り付けます。これにより、DOMから引き出してJavaScriptに渡すことができますグラフ機能。
DateField
aは Python objectdatetime.date
にマップされることに注意してください。そのtimetuple
ため、時間、分、および秒のフィールドが 0 に設定されます。それが十分にきめの細かいものでない場合はmydate
、DateTimeField に変更する必要があります。であるdatetime.datetime
。mydate.timetuple()
このまま行けばまだまだ使えます。
また、現地時間を使用していると仮定しています。UTC 時間を使用している場合は、 andではなくcalendar.gmtime()
が必要ですが、これはオブジェクトに対して有効なメソッドにすぎません。面倒な詳細については、ドキュメント (およびも参照) を参照してください。time.mktime()
mydate.utctimetuple()
mydate.timetuple()
utctimetuple()
datetime.datetime
datetime
time
calendar
mktime()
編集: piquadratが覚えていて、私が覚えていなかったfloatを返すという事実などの面倒な詳細。カスタム フィルターのアプローチも優れています。それを投票します。
別のオプション:
import time
from django.utils import timezone
naive_date = timezone.make_naive(mydate, timezone.get_current_timezone())
print int(time.mktime(naive_date.timetuple()))