Django的Javascript日期格式

时间:2012-10-16 13:45:37

标签: javascript django date

我正在用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不匹配。但我没有找到解决方法。

欢迎任何帮助。感谢。

2 个答案:

答案 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)

从Django 1.2开始,你可以做到

date = new Date({{ value|date:"c" }});

检查格式文档here