我正在用Django创建一个运动应用程序。我需要显示一个匹配列表,倒计时到达那些匹配的确切小时。
除了倒数到达比赛当天,而不是小时和分钟时,一切都有效。例如,如果比赛在晚上9点的2天内开始,则倒计时将在比赛当天的午夜停止。所以它不会到晚上9点。
这是我的代码:
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<script type="text/javascript" src="http://keith-wood.name/js/jquery.countdown.js"> </script>
</head>
<body>
<div style="float:left">
{% for match in matches %}
<div>
<p>{{ match }}</p>
<p> {{match.real_start}} <p>
<a href="{{ match.get_absolute_url_grille }}">Go</a>
<div class="match_countdown" data-date="{{ match.real_start|date:'M j, Y'}}"></div>
</div>
{% endfor %}
</div>
</br></br>
<script>
$('.match_countdown').each(function() {
var self = $(this),
date_string = self.attr('data-date'),
date = new Date(date_string);
self.countdown({until: date});
});
</script>
</body>
“real_start”是我的DateTime 我想问题是关于日期格式'M j,Y'与DateTimeField不匹配。但我没有找到解决方法。
欢迎任何帮助。感谢。
答案 0 :(得分:4)
在我看来,最好的解决方案是将Python代码中的DateTimeField模型属性转换为时间戳,转换为毫秒。要么通过向模型中添加一个处理逻辑的方法来实现,这是最简单的解决方案,然后在javascript中解析该字符串以获得毫秒或以其他方式编写Django过滤器,但这稍微复杂一些。
import time
import datetime
def datetime_to_milliseconds(some_datetime_object):
timetuple = some_datetime_object.timetuple()
timestamp = time.mktime(timetuple)
return timestamp * 1000.0
## Example using this
now = datetime.datetime.now()
millisecond_timestamp_now = datetime_to_milliseconds(now)
(代码是冗长的选择,以便您更容易掌握逻辑)。
您的Javascript应该是以下内容:
$('.match_countdown').each(function() {
var self = $(this),
date_string = self.attr('data-date'),
date_milliseconds = Number(date_string);
date = new Date(date_milliseconds);
self.countdown({until: date});
});
基本上,沿着这些方面应该做的事情,只需将其调整为方法。
未来的提示,尽量避免在模板中加入大量逻辑,这很容易出错并且不是一个好的做法(除非它只是渲染逻辑,即使有更好的解决方案)。
祝你好运。答案 1 :(得分:2)