2012-10-16 21 views
0

我正在用Django創建一個運動應用程序。我需要顯示一個倒數列表,這些倒數到達那些比賽的確切時間。使用Django的Javascript日期格式

一切工作都會發現,除了倒數到達比賽的那一天,而不是幾小時和幾分鐘。例如,如果比賽開始時間爲晚上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Ĵ,Y」不匹配DateTimeField字段。但我沒有找到解決辦法。

任何幫助將受到歡迎。謝謝。

回答

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}); 
}); 

基本上沿着這些線路的東西應該做這筆交易,只是將其適應的方法。儘量避免在模板中放置大量的邏輯,這很容易出錯,並不是一個好的做法(除非它只呈現邏輯,即使那裏有更好的解決方案)。

祝你好運。

+0

完美。謝謝! – JojoL

2

由於Django的1.2,你可以做

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

檢查格式的文檔here